Я написал и скомпилировал следующий код:
void main()
{
printf("%d", -10 & 5);
}
Я написал и скомпилировал следующий код:
void main()
{
printf("%d", -10 & 5);
}
В C в результате бинарного &
каждый бит зависит от двух соответствующих битов в операндах. Если бит в одной и той же позиции установлен (1) в обоих операндах, он устанавливается и в результате. Если ясно (0) в любом из операндов, то ясно и в результате. Например, если заданы биты 0011 и 0101, оператор &
выдаст 0001, потому что только в последней позиции установлен бит в обоих операндах.
Вы, вероятно, уже знаете, что положительные целые числа представлены в двоичном формате. Битовые позиции нумеруются, начиная с 0 справа, затем 1 для следующей позиции, 2, 3 и так далее. Бит в позиции i представляет собой значение 2i, поэтому бит 0 представляет 1, бит 1 представляет 2, бит 2 представляет 4, бит 3 представляет 8, бит 4 представляет 16 и так далее. Значение, представленное всеми битами, представляет собой сумму значений битов, для которых установлено значение 1. Таким образом, 101 представляет 5, поскольку биты для 22 = 4, а 20 sup> = 1, а 4+1 = 5.
Стандарт C определяет три правила, которые реализация C может использовать для представления отрицательных чисел (в C 2018 6.2.6.2 2):
В раннем компьютерном оборудовании и программном обеспечении все вышеперечисленное было опробовано. Последнее, дополнение до двух, доминирует в современных вычислениях для целых чисел. (Большинство операций с плавающей запятой используют знак и величину.) Тем не менее, стандарт C по-прежнему разрешает реализациям использовать любой из методов.
Из-за этого результат -10 & 5
зависит от реализации. Я проиллюстрирую использование восьми битов с пробелом, чтобы сгруппировать их в два набора по четыре бита для наглядности:
С дополнением до двух:
−10 & 5
представляет собой 0000 0100, что представляет 4.С дополнением:
−10 & 5
— это 0000 0101, что представляет 5.Со знаком и величиной:
-10 & 5
представляет собой 0000 0000, что представляет 0.Таким образом, реализация C, которая соответствует стандарту C, может дать 0, 4 или 5 для -10 & 5
, но 4 является наиболее распространенным результатом.
&
? - person Jabberwocky   schedule 27.05.2019&
. Ага... Теперь найдите битовую комбинацию числа-10
и числа5
. Теперь выясним, каков результат применения оператора&
. Вот что будет напечатано. - person Paul Ogilvie   schedule 27.05.2019main()
. Он должен вернутьint
. См. stackoverflow.com/questions/ 636829/ - person J...S   schedule 28.05.2019