Побитовый оператор Not (~ в C) в отношении младшего и старшего порядкового номера - PullRequest
4 голосов
/ 24 июня 2009

Это относится к домашнему заданию, но это не домашнее задание.

Я с трудом понимаю, есть ли разница в том, как побитовое нет (~ в C) повлияло бы на signed int и unsigned int при компиляции на старшей или младшей машине.

Являются ли байты действительно"задом наперед", и если да, то побитовые нет (и другие операторы) приводят к разным результирующим int s, в зависимости от типа машины?

Пока мы находимся на этом, одинаков ли ответ для каждого из побитовых операторов в C или он сильно зависит?

Операторы, на которых я ссылаюсь:

~  /* bitwise Not */
&  /* bitwise And */
|  /* bitwise Or */
^  /* bitwise Exclusive-Or */

Заранее спасибо!

Обновление: Читая мои ответы, я вынужден спросить, влияет ли побитовый оператор not на бит знака на signed int. Боюсь, я немного запутался в этой части, так как забыл обо всей этой глупости. Кажется, Адам заявляет, что все значения рассматриваются как неподписанные. Повторно применяется символьный бит или значение со знаком становится без знака?

Ответы [ 3 ]

7 голосов
/ 24 июня 2009

Битовые операторы и логические операторы работают одинаково на машинах с прямым и младшим порядком байтов. Кроме того, они также одинаково работают с подписанными и неподписанными данными: в результате получается, что все было без знака. Таким образом, если x и y являются целыми числами со знаком, то ~x равняется (int)(~((unsigned int)x), а x & y равняется (int)(((unsigned int)x) & ((unsigned int)y) и т. Д. Для всех других операторов.

2 голосов
/ 24 июня 2009

Как говорится в ответе @ Адама, поскольку эти операторы идут по крупицам, порядок байтов на самом деле не имеет значения! Например, (~x) == (-x-1) для каждого signed целого числа x, независимо от длины x в байтах, И независимо от порядка байтов машины (если она использует арифметику с двумя дополнительными компонентами - есть ли ЛЮБОЕ, что не т -?)

1 голос
/ 25 июня 2009

Логические операторы просто заботятся о том, равны ли их аргументы нулю или нет, им все равно, как эти значения на самом деле представлены в памяти. Так что для логических операций порядковый номер значения не имеет.

Битовые операторы всегда действуют на все биты своих аргументов и влияют на разные позиции битов индивидуально (бит № 5 в результате зависит только от бит № 5 на входах). Они не заботятся о порядке, в котором хранятся биты, или если некоторые из битов могут иметь особое значение для типа данных, они просто обрабатывают их все. Так что здесь порядок байтов также не имеет значения, потому что затрагиваются все биты, независимо от их порядка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...