Я знаю, что стандарты C и С++ не определяют конкретное представление чисел (могут быть два дополнения, знак и величина и т.д.). Но я не знаю стандартов достаточно хорошо (и не мог найти, если он заявил), чтобы знать, есть ли какие-либо конкретные ограничения/гарантии/зарезервированные представления, сделанные при работе с битами. В частности:
- Если все биты целочисленного типа равны нулю, целое число целых равно нулю?
- Если какой-либо бит целочисленного типа равен единице, то целое число в целом представляет ненулевое значение? (если это "да", тогда некоторые представления, такие как знак и величина, будут дополнительно ограничены)
- Есть ли гарантированный способ проверить, не установлен ли какой-либо бит?
- Есть ли гарантированный способ проверить, установлен ли какой-либо бит? (# 3 и # 4 зависят от # 1 и # 2, потому что я знаю, как установить, например, 5-й бит (см. # 5) в некоторой переменной
x
, и я бы хотел проверить переменнуюy
, чтобы узнать, будет ли это 5-й бит 1, я хотел бы знать, будет ли работатьif (x & y)
(потому что, как я понимаю, это зависит от значения представления, а не от того, действительно ли этот бит равен 1 или 0)) - Есть ли гарантированный способ установить самые левые и/или самые правые биты? (По крайней мере, проще, чем принимать
char c
со всеми битами true (устанавливаетсяc = c | ~c
) и делатьc = c << (CHAR_BIT - 1)
для установки высоких бит иc = c ^ (c << 1)
для младших бит, предполагая, что я не делаю любые предположения, которые я должен был бы, учитывая эти вопросы) - Если ответ на # 1 "нет", как можно перебрать биты в целочисленном типе и проверить, был ли каждый из них 1 или 0?
Я предполагаю, что мой общий вопрос: существуют ли какие-либо ограничения/гарантии/зарезервированные представления, сделанные стандартами C и С++ относительно битов и целых чисел, несмотря на то, что целочисленное представление не является обязательным (и если стандарты C и С++ отличаются в этом отношении, какова их разница)?
Я придумал эти вопросы, выполняя домашнее задание, требующее от меня немного манипулировать (обратите внимание, что это не вопросы из моей домашней работы, они гораздо более абстрактны).
Изменить: Что касается того, что я называю "битами", я имею в виду "биты формирования значения", и я не включаю "биты заполнения".