C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 签名右移:哪个编译器使用逻辑移位大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我用Visual studio,Ubuntu的GCC,Intel编译器MinGW测试了右移.所有转移的符号位.我猜 Xcode的GCC也是一样的.

我知道行为是具体的实现,但是看起来所有主要的桌面/服务器编译器都实现了算术移位.有没有任何广泛使用的编译器不会在符号位移动?

谢谢.

解决方法

C运行在很多不同的架构上.我的意思是很多不同的架构.您可以在嵌入式DSP和Cray超级计算机上运行C代码.

人们认为理所当然的C标准的大多数“实现定义”部分实际上只是在模糊的架构上打破了局面.例如,有DSP和Cray超级计算机,其中CHAR_BIT是一个巨大的32或64.所以如果你尝试在x86上的代码,也许如果你慷慨的PowerPC,ARM或SPARC,你不可能遇到任何真正奇怪的情况.没关系这些天的大多数代码将始终运行在具有二进制补码整数和算术移位的面向字节的架构上.毫无疑问,在可预见的未来,任何新的cpu架构都将是一样的.

但是让我们来看看整数的两个最常见的表示:二进制补码和补码:

switch ((-1) >> 1) {
case 0:
case -0:
    puts("Hello,one's complement world!");
    // Possibly sign-magnitude.
    break;
case -1:
    puts("Hello,two's complement world!");
    break;
default:
    puts("Hello,computer without arithmetic shift");
    break;
}

不要出汗只要坚持/当你想划分,>>当你需要转移即使是糟糕的编译器也很好的优化这些操作. (请记住,如果x是负数,x / 2!= x>> 1,除非你在一个补码机器上,这几乎肯定不是真的)

该标准确实保证if(int)x不为负,则(int)x>>> n ==(无符号)x>>> n,所以没有足够的空间让编译器做一些完全意外的事情.

大佬总结

以上是大佬教程为你收集整理的c – 签名右移:哪个编译器使用逻辑移位全部内容,希望文章能够帮你解决c – 签名右移:哪个编译器使用逻辑移位所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。