Что стандарты C и C ++ говорят о целочисленном представлении и манипулировании на уровне битов?

Я знаю, что стандарты C и C ++ не диктуют конкретное представление чисел (может быть дополнением до двух, знаком и величиной и т. Д.). Но я недостаточно хорошо знаю стандарты (и не могу найти, заявлено ли это), чтобы знать, существуют ли какие-либо конкретные ограничения / гарантии / зарезервированные представления, сделанные при работе с битами. В частности:

If all the bits in an integer type are zero, does the integer as whole represent zero? If any bit in an integer type is one, does the integer as a whole represent non-zero? (if this is a "yes" then some representations like sign-and-magnitude would be additionally restricted) Is there a guaranteed way to check if any bit is not set? Is there a guaranteed way to check if any bit is set? (#3 and #4 kind of depend on #1 and #2, because I know how to set, for example the 5th bit (see #5) in some variable x, and I'd like to check a variable y to see if it's 5th bit is 1, I would like to know if if (x & y) will work (because as I understand, this relies on the value of the representation and not whether nor not that bit is actually 1 or 0)) Is there a guaranteed way to set the left-most and/or right-most bits? (At least a simpler way than taking a char c with all bits true (set by c = c | ~c) and doing c = c << (CHAR_BIT - 1) for setting the high-bit and c = c ^ (c << 1) for the low-bit, assuming I'm not making any assumptions I should't be, given these questions) If the answer to #1 is "no" how could one iterate over the bits in an integer type and check if each one was a 1 or a 0?

Я предполагаю, что мой общий вопрос: существуют ли какие-либо ограничения / гарантии / зарезервированные представления, сделанные стандартами C и C ++ в отношении битов и целых чисел, несмотря на тот факт, что целочисленное представление не является обязательным (и если стандарты C и C ++ отличаются в в этом отношении, в чем их отличие)?

Я задавал эти вопросы, выполняя домашнее задание, которое требовало от меня некоторой манипуляции (обратите внимание, что это не вопросы из моего домашнего задания, они гораздо более «абстрактные»).

Edit: Что касается того, что я называю «битами»; Я имею в виду «формирование стоимости» биты и не включают "заполнение" биты.

Ответы на вопрос(8)

Ваш ответ на вопрос