gpt4 book ai didi

c++ - 为什么位是颠倒的?

转载 作者:行者123 更新时间:2023-11-28 00:35:10 25 4
gpt4 key购买 nike

在下面的代码中,我试图在 2 个 char 中存储一个 2 字节的 int。然后,我尝试在屏幕上显示我存储的号码。这些部分工作得很好。

另一方面,如果我尝试查看我存储的数字的二进制形式,我不会得到我期望的结果。 256 给我 00000000 1 而正确的是 10000000 0

unsigned int num = 256;
unsigned int pos = 0;

unsigned char a[2] = {num << pos, ((num << pos) & 0xFF00) >> 8};
//we store the number in 2 bytes

cout << (((unsigned int)a[0] + ((unsigned int)a[1] << 8)) >> pos) << endl;
//we check if the number we stored is the num

for(int i = 0; i < 2; i++)//now we display the binary version of the number
{
for(int j = 0; j < 8; j++)
cout << ((a[i] >> j)&1);
cout << " ";
}

谁能解释一下我做错了什么?

最佳答案

unsigned char a[2] = {num << pos, ((num << pos) & 0xFF00) >> 8};

表示您将低位存储在 a[0] 中,将高位存储在 a[1] 中。

256 = 1 00000000
a[0] = 00000000
a[1] = 00000001

for(int j = 0; j < 8; j++) (首先是最低有效位)应该是 for(int j = 7; j >=0; j--) (首先是最高有效位)

关于c++ - 为什么位是颠倒的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21202709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com