-5*3=-15 5*-3=-15 -5*-3=15 这三个不解释了吧。 -5/3=-1 5/-3=-1 -5/-3=1 这三个你这么理解,5/3=1,然后负负为正,正负为负,计算机的运算过程差不多也是这样。 -5%3=-2 5%-3=2 -5%-3=-2 这三个也是那么理解的,首先不管符号,然后5%3=2,然后负负为正,正负为负。。。 -5&3=3 5&-3=5 -5&-3=-7 这个是按位与,-5二进制是10000101,负数在计算机中是以补码保存的,补码是11111011,3是00000011,正数不用存补码,还是原码,按位与之后就是00000011,就是3。 5和-3按这个算法,5原码是00000101,-3原码是10000011,补码是11111101,按位与,00000101,就是5。 -5和-3,都是补码,-5补码是11111011,-3补码是11111101,按位与,结果是11111001,这里要注意了,这个数的符号位为1,所以这是一个补码,要翻译一下,除符号位不变外,其他位减1取反,结果是10000111,就是-7。 -5<<3=-40 5<<-3=-1610612736 -5<<-3=1610612736 移位,第一个还好说,-5的补码是11111011,左移3位,左移的过程后边是要补两个数的符号位的与运算的,结果就是11011000,这个数是一个负数,需要转换一次,除符号位外-1取反,就是10101000,就是-40。 第二个和第三个比较麻烦,我以上给你说的都是按照8位的存储说的,其实计算机真正是按照32位存储的,也就是传说中的32位系统,未来还会有64位系统这一说法,那一个数字就是64位了,好了,现在咱们看32位的情况。5的实际存储为32位的00000000000000000000000000000101,之前不提另外的0因为不影响运算结果,现在影响了,就加上。左移-3位,就是右移3位,前边补1,也就是两数的符号位求异或的结果,异或说白了还是负负为正,正负为负,这里补的就是1,结果就是11100000000000000000000000000000,这个数就是-1610612736。
原文:http://my.oschina.net/u/1445488/blog/511312