0x15返回00010101,不返回

问题描述

嗨,我正在处理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)。