十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
想要知道取反计算过程,首先搞懂 “原码“,“反码”,“补码”,“取反”。
成都创新互联主要从事网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务东乡族,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
0变1,1变0
原码是计算机机器数中最简单的一种形式,数值位就是真值的绝对值。原码表示法在最高位为符号:正数该位为0,负数该位为1,原码又称带符号的绝对值。看整数9及-9的原码如下:
9的原码:0000 1001
-9的原码: 1000 1001
重点:对于源码,绝对值相等的正数和负数只有符号位不同。
反码通常是用来由原码求补码或者由补码求原码的过渡码。正数的反码就是其原码,负数的反码就是将原码除符号位以外每位取反(0变1,1变0)。例如:
9的反码:0000 1001
-9的反码:1111 0110
在计算机系统中,数值一律用补码来表示和存储。正数的原码就是其补码。负数的补码是其反码+1.例如:
9的补码:0000 1001
-9的补码:1111 0111
正整数的原码、反码、补码都是一样的。负数的反码是除符号位其他每一位取反,负数的补码是其反码+1
首先明确一个概念,由于在计算机中二进制都是以其补码形式存放在内存中的。所以要知道 ^9 就是对 9 的补码取反,也就是说无论是整数还是负数对其取反都是对其补码取反。
正数9:
原码为: 0000 1001
反码为: 0000 1001
补码为: 0000 1001
1. 取反结果=负数补码 :0000 1001 --- (取反) 1111 0110
注:由于 ^ 位取反操作符,对于符号位也会取反 所以这里得到一个负数的补码,想要计算其真实的值。还需要将其转换成原码。
2. 得反码:1111 0110 - 1 = 1111 0101
补码 = 反码 + 1 (反推) 反码 = 补码 - 1
3. 得原码 1111 0101 -- 1111 1010 = -10
原码 = 反码取反
负数-9:
原码为: 1111 1001
反码为: 1111 0110
补码为: 1111 0111
1. 取反结果=正数补码 1111 0111 ---- 0000 1000
2. 正数原码 = 反码 = 补码 = 0000 1000 = 8
-1的二进制是1111 1111,不是1000 0001喔,负数的二进制表示为其原码的反码再加1,
正数的反码跟原码不变,而负数的反码除符号位外其他位取反
-1的原码是1000 0001,所以反码为1111 1110,最后在加1即1111 1111
如果二进制1000 0001是一个有符号位的8位数据,那么最高位为符号位,1为负数0为正数
那反过来二进制1000 0001表示成十进制就是减1在取反,
1000 0001 - 1=1000 0000
除符号位取反后为1111 1111即-127
取一个数的相反数,可以用数学运算来实现:-1 * x的结果就是x的相反数。
左移运算符()
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
例:a = a 2 将a的二进制位左移2位,右补0,
左移1位后a = a * 2;
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
右移运算符()
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
例如:a = a 2 将a的二进制位右移2位,
左补0 or 补1 得看被移数是正还是负。