gpt4 book ai didi

c - 该位运算符代码是副作用(K&R C 书中使用的术语)还是依赖于机器的处理指令?

转载 作者:太空狗 更新时间:2023-10-29 15:48:19 27 4
gpt4 key购买 nike

这里有两段代码似乎在做同样的事情,但事实并非如此。这两个不同的运行和比较输出与跟踪会造成混淆,因为第一个代码处理似乎是机器相关代码。请阅读两段代码

代码 1:--

unsigned char c=(((~0 << 3) >> 4) << 1);
printf("%d", c);

输出:-- 254

代码 2:--

unsigned char c=(~0 << 3);
c >>= 4;
c <<= 1;
printf("%d", c);

输出:-。 30

上面代码的输出是不同的。

不仅此代码(第一个代码)会造成混淆,而且涉及单行多个位移运算符的所有类型的代码都会产生意想不到的结果。

第二个代码是正确的。

请在您的机器上运行此代码并验证以上输出

和/或

解释为什么这些输出不一样。

最后我们必须知道,我们不应该在我们的代码中应用多个移位运算符。

谢谢

最佳答案

~0 << 3总是一个错误,两个例子都不正确。

  • 0类型为 int已签名。
  • ~0会将二进制内容转换为全部内容:0xFF...FF .
  • 当您将数据左移到有符号整数的符号位时,您会调用未定义的行为。如果您左移一个负整数,也是一样。

结论:两个示例都没有确定性输出,并且都可能崩溃或打印垃圾。

关于c - 该位运算符代码是副作用(K&R C 书中使用的术语)还是依赖于机器的处理指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56294403/

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