gpt4 book ai didi

c - 移位操作的奇怪结果

转载 作者:太空狗 更新时间:2023-10-29 14:51:01 24 4
gpt4 key购买 nike

我试图更好地理解双移操作,所以我自己编写了一个小程序。

unsigned char a = 240;
a= (a << 3) >> 7;
printf("a: %u\n",a);

现在我想结果会是这样的:

11110000 // 240
10000000 // << 3
00000001 // >> 7

所以 1,但我得到 15。我很困惑......感谢任何帮助!

最佳答案

你的问题是这条语句:(a << 3)将输入转换为 int .所以此时你有 240 * 2 ^ 3 = 1920

00000000000000000000011110000000

然后您将之前的结果除以 2 ^ 7 = 128所以你有:15

00000000000000000000000000001111

这正是您得到的结果。

如果你想截断你可以使用的位:

printf("a: %u\n",a & 1); //get only last bit so you would have 1 as a result!
printf("a: %u\n",a & 255); //get all 8 bits

希望这对您有所帮助!

关于c - 移位操作的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8377739/

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