В соответствии со стандартом C представление значения целочисленного типа определяется реализацией. Поэтому 5
может не отображаться как 00000000000000000000000000000101
или -1
как 11111111111111111111111111111111
, как мы обычно предполагаем в 32-битном дополнении 2. Поэтому, хотя операторы ~
, <<
и >>
четко определены, битовые шаблоны, над которыми они будут работать, определяются реализацией. Единственный определенный битовый шаблон, который я мог найти, был "§5.2.1/3. Байт со всеми битами, установленными в 0, называемый нулевым символом, должен существовать в базовом наборе символов выполнения, он используется для завершения символьной строки".
Итак, мои вопросы - Есть ли независимый от реализации способ преобразования целочисленных типов в битовый шаблон?
Мы всегда можем начинать с нулевого символа и делать на нем достаточно бит операций, чтобы получить его до нужного значения, но я считаю его слишком громоздким. Я также понимаю, что практически все реализации будут использовать представление с двумя дополнениями, но я хочу знать, как это сделать обычным способом. Лично я считаю эту тему довольно интригующей из-за вопроса программирования устройства-драйвера, где весь код, написанный до даты, принимает конкретную реализацию.