-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。