Побитовое и логическое И / ИЛИ с точки зрения шестнадцатеричного результата

Так что если у меня есть 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.

Другие вопросы по тегам