Побитовое неоператор (~ в C) относительно маленького конца и большого конца

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

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

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

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

Я имею в виду следующие операторы:

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

Благодарим вас в Advance!

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

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