c语言移位问题

查看:66
本文介绍了c语言移位问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

int x = 1;          //int为32位
int a = 1 << 32;    //00000000
int b = x << 32;    //00000001

为什么这两种方式结果会不同?

看起来是 第3行对32取了模 但第2行没有

第2行的1默认不就是int类型吗

解决方案

这里有个类似的问题(动动手指就能搜到的好么)。

C 层面的解释是:未定义行为,怪异点是正常的。

CPU 层面的解释是:Intel CPU 把左移位数的操作数只取了五位。但为什么结果不同,你还是自己去看 StackOverflow 那个回答吧。

PS: 这个程序开优化之后结果是一致的,也就是说未优化时,部分结果是编译期计算的,部分结果是交给 CPU 在运行时计算的,所以有差别。

这篇关于c语言移位问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆