Подписано int на языке c, определяет битовые поля, но путаница

В настоящее время я работаю над c и сталкиваюсь с путаницей относительно подписанного int в структуре, и здесь я привел пример:

#include <stdio.h>
#include <string.h>

struct {
  signed int age : 4;
} Age;

int main( ) {

   Age.age = -8;
   printf("Age.age : %d\n", Age.age );

   return 0;
}

Здесь я уже описал размер битов, которые int будет занимать при сохранении значения. здесь я назначаю возраст -8. поэтому он будет хранить значение как 1000 для 8 и для -8 он должен хранить как 11000, где левый 1-й бит известен как знаковый бит. Поэтому, если int age должен хранить -8, он должен иметь 5 битов, но пока я компилирую данный пример, он не выдает ошибку и отображает вывод.

Пожалуйста, помогите мне с моими проблемами.

1 ответ

Решение

Вероятно, целые числа хранятся с использованием представления дополнения 2 в вашей системе.

В дополнении 2 4-битное битовое поле может содержать диапазон -8 Через +7, Битовое представление 1000 будет означать -8и не возможно хранить +8,

Присвоение значения вне диапазона (например, +8 в этом случае) вызывает поведение, определяемое реализацией.

Другие вопросы по тегам