读书人

求解移位运算符!解决办法

发布时间: 2012-04-08 14:38:30 作者: rapoo

求解移位运算符!
#include<iostream>
using namespace std;
int main()
{
int a=77,b=33,c=57;
cout<<"a<<b="<<(a<<b)<<endl;
return 0;
}
求解移位运算符,为什么结果是154啊
怎么算的啊

[解决办法]
有可能是编译器认为左移32位相当于没移位,直接给优化成左移1位了
相当于*2,所以就是77*2=154

[解决办法]
移位运算符,作用于带符号数的时候要小心,尤其是像你这种移得很多,可能符号位溢出的情况...
[解决办法]
对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。。。

[解决办法]
移位运算的移位数直接对变量位数取余,int型右移33位直接对33取余视为右移1位
根本谈不上什么优化,标准就是这么规定的
[解决办法]
所以01001101向左移一位为1为10011010=154

探讨

对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。。。

读书人网 >C++

热点推荐