unsigned int a = 1610612736; //0110 0000 0000 0000 0000 0000 0000 0000
unsigned int b = a<<1; // 3221225472
//0001 0011 0011 0011 0011 0011 0011 0011
左移一位 应该是 1100 0000 0000 0000 0000 0000 0000 0000 , 但实际上不是,为什么?
这里是左移所以不存在右移的补0还是补1的问题,而且是无符号的
8 个解决方案
#1
>左移一位 应该是 1100 0000 0000 0000 0000 0000 0000 0000 , 但实际上不是,为什么?
因为你算错了
因为你算错了
#2
你的二进制是:322122547
正确结果是:3221225472
你仔细眼看有什么不同。。
正确结果是:3221225472
你仔细眼看有什么不同。。
#3
从哪里看出来的实际上不是?
#4
>左移一位 应该是 1100 0000 0000 0000 0000 0000 0000 0000 , 但实际上不是,为什么?
因为你算错了
因为你算错了
#5
断点看 b 的值就知道了
#6
关掉编译优化,并且,断点要加到后面一条语句上,b才会被更新。
#7
我是在 debug 下调试的,你试都不试就瞎猜
#8
楼主多半犯傻以为当前行已经被执行过了!
#1
>左移一位 应该是 1100 0000 0000 0000 0000 0000 0000 0000 , 但实际上不是,为什么?
因为你算错了
因为你算错了
#2
你的二进制是:322122547
正确结果是:3221225472
你仔细眼看有什么不同。。
正确结果是:3221225472
你仔细眼看有什么不同。。
#3
从哪里看出来的实际上不是?
#4
>左移一位 应该是 1100 0000 0000 0000 0000 0000 0000 0000 , 但实际上不是,为什么?
因为你算错了
因为你算错了
#5
断点看 b 的值就知道了
#6
关掉编译优化,并且,断点要加到后面一条语句上,b才会被更新。
#7
我是在 debug 下调试的,你试都不试就瞎猜
#8
楼主多半犯傻以为当前行已经被执行过了!