Как правило, это работает.
Побитовые операции выполняют булевы операции над битами, представляющими их операнды. Логические операции - это логические операции, выполняемые на булевых множествах, обычно TRUE и FALSE или 1 и 0. Булевским множеством может быть любая группа отдельных элементов, где общее количество элементов набора равно 2.
В случае выполнения побитового AND на операндах 7 и 15: если используемая вами система представляет их как прямые двоичные числа без каких-либо странных смещений, тогда 7 становится 0111 в двоичном коде, 15 становится 1111 в двоичном формате. Ведущее значение 0 в двоичном формате 7 необязательно, поскольку оно равнозначно тому, как добавление нуля к любому десятичному числу: 10 = 010 = 000000000000010, но проще проиллюстрировать операцию с начальным нулем.
0111 7 in binary
1111 15 in binary
&&&& bitwise AND
0111 results in 7
, если true
и false
представлены в виде двоичной 1 и 0, то нет никакой разницы между «логическим» and
и «поразрядными» and
операций.
1 true as binary 1
0 false as binary 0
& either logical or bitwise AND
0 results in binary 0
попытка побитовое and
на некоторых других чисел, как, скажем, 1 и 2
01 1 in binary
10 2 in binary
&& bitwise and
00 results in binary 0
Предполагая, что любое число, кроме 0, будут преобразованы в true
, выполняя «логический» and
на номера 1 и 2 приведет к другому результату
1 the number 1 converted to true and represented as boolean 1
1 the number 2 converted to true and represented as boolean 1
& logical and
1 results in true, here represented as binary 1
При выполнении побитовых операций с использованием поплавков, отрицательных чисел или основных иначе, чем положительные целые числа, вы можете получить радикально разные результаты. Это связано с различными средами, использующими разные методы для хранения чисел в памяти.Конечно, все это двоично, но числовая строка не всегда сосредоточена на двоичном нуле, и не всегда бывает, что каждый бит представляет собой часть числа; некоторые из битов могут представлять знак числа или экспонента. Вам нужно будет выкопать детали реализации, если вы хотите просто подставить десятичные числа в побитовые операции. С этим проще справиться, если у вас есть метод преобразования чисел в двоичный, потому что тогда вы точно знаете бит и их порядок, и вы сможете проверить, соответствуют ли ваши ожидания вашим результатам.
Как 'boolean' представляется в памяти, является« деталью реализации ». Это означает, что а) не для программиста, о котором нужно заботиться, и б) он может измениться, если MS подумает, что это имеет смысл. – igrimpe
@igrimpe, я пытаюсь понять, если все WORD обрабатывается как один бит в случае логической логики. – w0051977
Если вы конвертируете любое число в boolean в VB.Net, это правило: Если оно равно 0, результат будет ложным. Иначе это правда. Если вы конвертируете логическое значение в int (например), ситуация усложняется. false будет давать 0, но значение true может быть 1 или -1 в зависимости от используемого метода преобразования. Самый большой источник путаницы в VB.Net imho: логические и побитовые операторы кажутся «одинаковыми» (другие языки имеют разные операторы, но VB имеет довольно «историю»). – igrimpe