c – 为什么`int >> 32`不总是为零?
发布时间:2020-12-16 10:53:42 所属栏目:百科 来源:网络整理
导读:参见英文答案 Weird behavior of right shift operator (1 32)????????????????????????????????????7个 有人可以解释一下为什么一些4字节整数的32位按位移位可能在C/C++中不返回零吗?为什么它依赖于编译器的-O选项? 例如,在gcc 4.8.3中,此代码为-45提供了
参见英文答案 >
Weird behavior of right shift operator (1 >> 32)????????????????????????????????????7个
有人可以解释一下为什么一些4字节整数的32位按位移位可能在C/C++中不返回零吗?为什么它依赖于编译器的-O选项? 例如,在gcc 4.8.3中,此代码为-45提供了-O0和0以及-O3选项: unsigned int x = 45; // 4 bytes x = x >> 32; printf("%un",x); 为什么会这样? 解决方法
因为它是未定义的行为:[expr.shift]说
至于具体的未定义行为,我想它如下: >使用-O0,它编译为实际在机器代码中执行右移,并且在某些机器上(例如我相信x86就是这样),移位功能仅在移位32位字时查看移位量的低5位;移位32与移位0相同. 您可以检查装配输出以查看我的预测是否正确. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |