数字在计算机里是按照二进制来表示的。
箭头朝哪边就是朝哪边移动
补码,反码,和源码
负数原码转化为补码:符号位不变,数值位按位取反,末尾加一。
负数补码转化为原码:符号位不变,数值位按位取反,末尾加1。
负数反码转化为补码:末尾加1。
在Java中~符号是按位取反,例如,~5=-6。-5=4. 快速计算:一般~可以直接用(a+1)算,正数负数均可
思路:
是按位取反运算,与反码是不同的,
反码法规定,正数原反补码相同,负数的反码为原码除符号位以外取反。
而按位取反运算中:正数取反是先将初始数值转换成二进制数(6==》00000110),再对二进制数的每一位取反:即将0变为1、将1变为0。(00000110==》11111001),得到的是最终结果的补码,要转换为最终结果的原码则需再次取补码,(此处一种逆着算为11111001-1除符号位全取反10000111即为-7,另一种为11111001==》10000110+1==》10000111也为-7)就能得到计算结果。
负数取反:先将初始数值转换成二进制数(以-6为例,10000110),再取得二进制数的补码(10000110==》11111001+1==》11111010),之后对补码的每一位取反:即将0变为1、将1变为0(11111010==》00000101即为5)。得到的是最终结果的补码(由于正数的原码、反码、补码相同,该数即为原码),要转换为最终结果的原码则需再次取补码,就能得到计算结果。
注:在计算机中,运算都是通过补码进行计算的,这个点也是今晚我一直想不到的点,以至混淆了概念,胡乱取反。
计算机中的信息都是以二进制形式表示的,数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负)。
讲一下反码补码原码的使用。
通过讲一个例子
3取反以后的值是多少
注意一下取反和反码是有区别的。
int本来是32位因为为了简单,假设int是由8位组成的。
而且最高位表示的正负
0代表正
1代表负
取反以后得到的是补码
同时通过符号位得知是负数
负数的反码+1是补码
所以反码=补码-1
所以可以得到取反以后的值是-4https://www.zhihu.com/video/1207753927237832704