gpt4 book ai didi

c++ - 两段代码,逻辑相同。一个给出预期的输出而另一个没有

转载 作者:行者123 更新时间:2023-11-30 03:44:23 24 4
gpt4 key购买 nike

char xtime(char m)
{
//calculates the m value by checking m,if m is less than 0x80 hexadecimal
// then it is left shifted else it is left shifted and xor'ed with 0x1b.
if(m<0x80)
{
m<<=1;
} else {
m=(((m)<<1)^0x1b);
}

printf("%#01x ",m&0xff);
return m;
}

如果 m=0x80(即 0x1b),这段代码不会显示预期的输出,它给出的输出为十六进制的 0。

#define xtime(a) (((a)<0x80)?(a)<<1:(((a)<<1)^0x1b) )

这段代码有效并给出了预期的结果。

请问功能代码哪里出了问题,第二个代码是怎么解决的。

最佳答案

假设在你的环境中

  • char已签署
  • char是8位长
  • two's compliment 用于表示负整数
  • 如果要转换为的有符号整数不能存储原始值,则简单地丢弃高位

0x80太大而无法存储到 char变量,它将被解释为 -128 . -128小于 0x80 , 所以 m <<= 1;被执行。这一转变的结果是-256 , 它的二进制表示是 0xffffff00 , 和 m会得到最后8位,也就是0 .这就是您所得到的。

如果0x80,宏将起作用传递给 a ,因为计算将使用 int 完成, 和 int可以容纳至少 32767 的整数.

关于c++ - 两段代码,逻辑相同。一个给出预期的输出而另一个没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35508957/

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