`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)。