gpt4 book ai didi

c - C中0x01和0x80分别代表什么?

转载 作者:太空狗 更新时间:2023-10-29 14:58:18 26 4
gpt4 key购买 nike

我正在尝试反转 C 中的位顺序(家庭作业问题,主题:按位运算符)。我找到了 this解决方案,但我对使用的十六进制值 -- 0x01 和 0x80 感到有点困惑。

  unsigned char reverse(unsigned char c) {
int shift;
unsigned char result = 0;

for (shift = 0; shift < CHAR_BITS; shift++) {
if (c & (0x01 << shift))
result |= (0x80 >> shift);
}
return result;
}

book我正在研究尚未讨论过这些类型的值,所以我不太确定如何理解它们。有人可以阐明这个解决方案吗?谢谢!

最佳答案

0x01 是最低有效位组,因此十进制值为 1。

0x80 是 8 位字节集的最高有效位。如果它存储在一个带符号的字符中(在使用 2 的补码表示法的机器上 - 正如您可能遇到的大多数机器那样),它是最负的值(十进制 -128);在 unsigned char 中,它是十进制 +128。

另一种成为第二天性的模式是所有位都设置为 0xFF;这是有符号字符的十进制 -1 和无符号字符的 255。当然,还有没有位设置的 0x00 或零。

循环在第一个周期所做的是检查是否设置了 LSB(最低有效位),如果是,则在结果中设置 MSB(最高有效位)。在下一个周期,它检查下一个 LSB 并将下一个设置为 MSB,等等。

| MSB |     |     |     |     |     |     | LSB |
| 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | Input
| 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | Output
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x80
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0x01
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | (0x80 >> 1)
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | (0x01 << 1)

关于c - C中0x01和0x80分别代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2660484/

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