Подписано 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
в этом случае) вызывает поведение, определяемое реализацией.