вот код, который я нашел с помощью битового поля, напечатал int number в двоичном формате, но я также прочитал это поле бит только с использованием unsigned
, int
по его типу, так что это законно для этот код с использованием char
типа? Правильный способ использования битового поля номер печати в двоичном формате
struct bits
{
unsigned char ch1 : 1;//01
unsigned char ch2 : 1;
unsigned char ch3 : 1;
unsigned char ch4 : 1;
unsigned char ch5 : 1;
unsigned char ch6 : 1;
unsigned char ch7 : 1;
unsigned char ch8 : 1;
};
void main()
{
int data = -1;
int length = 4;
struct bits *p = &data;
while (length--)
{
printf("%d%d%d%d %d%d%d%d ",
(p + length)->ch8,
(p + length)->ch7,
(p + length)->ch6,
(p + length)->ch5,
(p + length)->ch4,
(p + length)->ch3,
(p + length)->ch2,
(p + length)->ch1
);
}
system("pause");
}
спасибо ваш ответ, но путем удаления 'char' только' unsigned' слева я получил неправильный выход 0000 0000 0000 0000 0000 0000 1111 1111 на моей Xcode – dispute
@ v2pro Хотя этот вывод может быть не таким, как хотелось бы, это не «неправильно». Вместо использования кода типа 'struct bits * p = &data;' используйте 'union' из 4' struct bits', накладывающихся на 'uint32_t'. Ваш подход, как он есть, подразумевает неопределенное поведение. – chux
Здесь действительно 3 вопроса: 1) Может ли 'unsigned char' разрешать бит-поле? 2) Является 'printf ("% d ... 'Правильный формат? 3) Является' struct bits * p = &data; 'OK. Это сообщение отвечает на первое 2. Последнее - неопределенное поведение. – chux