gpt4 book ai didi

c++ - 位操作 : Similar operation results in different results

转载 作者:太空狗 更新时间:2023-10-29 23:39:24 26 4
gpt4 key购买 nike

下面这段代码没有计算出我认为它应该有的东西:

#include <stdio.h>
#include <stdint.h>

int main(void) {

uint32_t var = 0x55555555;
uint32_t res1 = (var & (0x3 << (15*2)) >> (15*2));
uint32_t res2 = (var & (0x3 << (14*2)) >> (14*2));
printf("result1 = 0x%08x\n", res1);
printf("result2 = 0x%08x\n", res2);

return 0;
}

输出:

结果 1 = 0x55555555

结果 2 = 0x00000001

谁能解释为什么在执行完全相同的操作时 result1 和 result2 会不同?在执行移位和按位与时,我做错了什么?

最佳答案

15 *2 = 30。0x3 = 2 位 -> 设置 uint32 中的最高位。因为 0x3 是有符号的,所以这是一个负数。将其向下移动 30 位得到 0xFFFFFFFFF。当然,如果将 0x3 向上移动 28 位然后再次向下移动,则不会发生同样的情况。

如果你真的想分别在位 31&30 和位 29&28 中挑选出两位,我会这样做:

uint32_t res1 = (var >> (15*2)) & 0x3;
uint32_t res2 = (var >> (14*2)) & 0x3;

除了“更正确”之外,这还节省了一个类次。

关于c++ - 位操作 : Similar operation results in different results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35596897/

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