嗨,我正在处理 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;
}
Run Code Online (Sandbox Code Playgroud)
我怀疑可能有一种特定的方式将十六进制文字保存在内存中,有人能看到我在这里遗漏了什么吗?
或者,十六进制在内存中保存为 4 个字节,并且我正在使用的宏脚本中存在某种错误?
15 会给你 00001111。
但是 0x15 会给你 00010101,也就是 21(不是 0x21)。