gpt4 book ai didi

c - 移位困惑

转载 作者:行者123 更新时间:2023-12-01 13:28:57 26 4
gpt4 key购买 nike

为什么 0x56 << 2不等于 0x58

0x560 1 0 1 0 1 1 0所以向左移动 2 位我们得到

         0 1 0 1 1 0 0 0

010110000x58 .但这不是正确答案 0x158 .那么我在这里缺少什么?

即使我这样做:

int main(){
unsigned char a;
a=0x56;
printf("%x",a<<2); // I am expecting the output to be 58 here.
}

为什么打印 158。为什么只考虑 8 位?

最佳答案

位移运算符 <<>>仅适用于整数。所以当你在这里使用它时,它们首先被提升为 int (大于 1 个字节)然后完成移位。可以看到在6.5.7p3的标准中提到了它

The integer promotions are performed on each of the operands. The type of the result is that of the promoted left operand.

printf (带有 %x 和格式说明符)还期望参数的类型为 unsigned int .所以没有执行降级,你得到 0x158 .

如果你希望结果只有一个字节,你应该将结果转换回unsigned char作为-

printf("%x", (unsigned char)(a << 2));

或者你可以声明另一个变量b并打印出来 -

unsigned char b;   
b = a << 2;
printf("%x", b);

可以看Demo here .

关于c - 移位困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47150550/

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