c 负数 正数 运算

-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。
相关文章
相关标签/搜索