关于表达式的计算问题
根据下面的变量的初始化计算表达式的值。表达式中变量的值都是使用开始给的初始化的值。
int a=10,b=-25;
1.b>>3
2.a&b
3.a|b
4.~b
5.b>>a-4
希望有详细的过程演示,这便于我自己总结。谢谢!
[解决办法]
1 b右移3位,所以b=
2 a和b进行位操作&,那么将a的每一位比特和b的每一位比特位进行与,得到结果就是该表达式的值
3 a 和b进行或操作
4 b进行非操作
5 b进行(a-4)次的右移操作而已
[解决办法]
假设 int 占32位,那么b = -25,
b的原码是: 1000,0000,,0000,0000,,0000,0000,,0001,1001 最高位是符号位
计算机里b是按照补码保存的,补码 = 原码的符号位不变,其余位 按位取反 再加1,
b的补码是: 1111,1111,,1111,1111,,1111,1111,,1110,0111
b右移3位: 左端补符号位(这个到底是补0还是补1,看编译器吧,我用的vs是按照符号位补的)
右移后: 1111,1111,,1111,1111,,1111,1111,,1110,0
左端空了3位,补符号位:
1111111,1111,,1111,1111,,1111,1111,,1110,0
整理下: 1111,1111,,1111,1111,,1111,1111,,1111,1100
再变成原码:符号位不变,其余位减1 再取反
1000,0000,,0000,0000,,0000,0000,,0000,0100
b>>3 就是 -4.