`0x15` returns 00010101,不是
`0x15` returns 00010101, not
嗨,我正在处理 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)。
嗨,我正在处理 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)。