问题描述
嗨,我正在处理C编程中的按位表示形式
我打印出0x15
,期望0000 1111
,但得到0001 0101
。就是0x21
。
我使用此宏以二进制形式打印数字
#include <stdio.h>
#define BYTE_TO_BINARY_PATTERN_1BYTE "%c%c%c%c %c%c%c%c"
#define BYTE_TO_BINARY(byte) \
(byte & 0x80 ? '1' : '0'),\
(byte & 0x40 ? '1' : '0'),\
(byte & 0x20 ? '1' : '0'),\
(byte & 0x10 ? '1' : '0'),\
(byte & 0x08 ? '1' : '0'),\
(byte & 0x04 ? '1' : '0'),\
(byte & 0x02 ? '1' : '0'),\
(byte & 0x01 ? '1' : '0')
int main(){
printf(BYTE_TO_BINARY_PATTERN_1BYTE,BYTE_TO_BINARY(0x15));
printf("\n");
return 0;
}
我怀疑也许有一种特定的方式将十六进制文字保存在内存中,有人可以看到我在这里丢失的内容吗?
或者,十六进制数在内存中保存为4个字节,并且我正在使用的宏脚本中存在某种错误?
解决方法
15会给您00001111。
但是0x15会给您00010101,即21(不是0x21)。