读书人

关于表达式的计算有关问题

发布时间: 2012-05-07 12:40:40 作者: rapoo

关于表达式的计算问题
根据下面的变量的初始化计算表达式的值。表达式中变量的值都是使用开始给的初始化的值。
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.

读书人网 >C语言

热点推荐