Побитовое и логическое И / ИЛИ с точки зрения шестнадцатеричного результата
Так что если у меня есть x = 0x01
а также y = 0xff
и я делаю x & y
, Я бы получил 0x01
, Если я сделаю x && y
я все еще получаю 0x01
, но компьютер просто говорит, что это правда, если это что-то, чем 0x00
? Мой вопрос: одинаковые ли биты после операции, независимо от побитового или логического И / ИЛИ, но компьютер просто по-разному интерпретирует конечный результат? Другими словами, являются ли шестнадцатеричные значения результата операций & и && (аналогично | и ||) одинаковыми?
редактировать: говорить о C здесь
2 ответа
Ответ зависит от конкретного используемого языка.
В некоторых слабо типизированных языках (например, Perl, JavaScript) a && b
будет оценивать до фактического значения b
если оба a
а также b
являются "правдивыми", или a
иначе.
В C и C++ &&
оператор просто вернет 0 или 1, т.е. int
эквивалент true
или ложь
В Java и C# даже нелегально предоставлять int
в &&
- операнды уже должны быть логическими.
Я не знаю ни одного языка на макушке, где a && b == a & b
для всех законных ценностей a
а также b
,
В C# операторы ведут себя по-разному: && разрешено только для логических типов и & для любого целочисленного типа.
a && b возвращает true, если оба значения a и b верны. a & b возвращает результат побитовой операции AND.