gpt4 book ai didi

c - 需要澄清位移位

转载 作者:行者123 更新时间:2023-12-04 11:11:58 25 4
gpt4 key购买 nike

void test()
{

unsigned char c;
c = (~0)>>1 ;
printf("c is %u\n",c);

}

它打印 255。我期待 127,因为我期待最左边的位在右移后设置为 0。这是因为我的编译器在进行右旋转吗?

最佳答案

文字 0int 类型。因此,整个表达式将被评估为 int.

类型

表达式:

(~0) >> 1

评估为 int 类型。

  • 因此 ~0 计算为 0xffffffff(假设 32 位)。
  • 移位后变为:0x7fffffff

当您存储到 c(即 unsigned char)时,它会截断为 0xff,即 255 .

要获得您期望的 127,您需要转换 ~0:

c = (unsigned char)(~0) >> 1;

旁注:即使我们只将 0 转换为 unsigned char,结果仍然是 255。这是因为隐式整数提升。所有小于 int 的中间值都被提升为 int

更多信息:https://www.securecoding.cert.org/confluence/display/seccode/INT02-C.+Understand+integer+conversion+rules

关于c - 需要澄清位移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10989689/

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