原码、反码、补码、按位取反(~)
数值在计算机中是以补码的⽅式存储的,在探求为何计算机要使⽤补码之前, 让我们先了解原码, 反码和补码的概念。
对于⼀个数, 计算机要使⽤⼀定的编码⽅式进⾏存储。 原码, 反码, 补码是计算机存储⼀个具体数字的编码⽅式。
⼀个数在计算机中的⼆进制表⽰形式, 叫做这个数的机器数。机器数是带符号的,在计算机⽤⼀个数的最⾼位存放符号, 正数为0, 负数为1。
⽐如,⼗进制中的数 +2 ,计算机字长为8位,转换成⼆进制就是[00000010]。如果是 -2 ,就是 [10000010] 。因为第⼀位是符号位,所以机
器数的形式值就不等于真正的数值。例如上⾯的有符号数 [10000010],其最⾼位1代表负,其真正数值是 -2 ⽽不是形式值130([10000010]
转换成⼗进制等于130)。所以将带符号位的机器数对应的真正数值称为机器数的真值。
原码 反码 补码
原码就是符号位加上真值的绝对值, 即⽤第⼀位表⽰符号, 其余位表⽰值。
反码的表⽰⽅法是:正数的反码是其本⾝;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
补码的表⽰⽅法是:正数的补码就是其本⾝;负数的补码是在原码的基础上, 符号位不变, 其余各位取反, 最后+1。 (即在反码的基础上+1)
举例:
⼗进制数原码反码补码
850101 01010101 01010101 0101
-851101 01011010 10101010 1011
90000 10010000 10010000 1001
-91000 10011111 01101111 0b2c电商网站 111
那么计算机为什么要使⽤补码呢?
⾸先,根据运算法则减去⼀个正数等于加上⼀个负数, 即: 1-1 = 1+(-1), 所以计算机被设计成只有加法⽽没有减法, ⽽让计算机辨别”符号
位”会让计算机的基础电路设计变得⼗分复杂,于是就让符号位也参与运著名散文 算,从⽽产⽣了反码。
⽤反码计算, 出现了”0”这个特殊的数值, 0带符号是没有任何意义的。 ⽽且会有[0000 0000]和[1000 0000]两个编码表⽰0。于是设
计了补码, 负数的补码就是反码+1,正数的补码就是正数本⾝,从⽽解决了0的符号以及两个编码的问题: ⽤[0000 0000]表⽰0,⽤[1000
0000]表⽰-128。
注意-128春天古诗 实际上是使⽤以前的-0的补码来表⽰的, 所以-128并没有原码和反码。使⽤补码, 不仅仅修复了0的符号以及存在两个编码的问
题, ⽽且还能够多表⽰⼀个最低数。 这就是为什么8位⼆进制, 使⽤补码表⽰的范围为[-128, 127]。
按位取反(~)
按位取反是对补码进天庭剩女 ⾏了取反(包括符号位)
正数取反:
~12
12
原码:0000 1100
反码:0000 1100
补码:0000 1100
补码按位取反:
~(0000 1100)=111猪和狗合不合 1 0011(按位取反后的补码为负数,反吸引反义词 向求反码、原码)
反码:1111 0010
原码:1000 1101 (⼗进制:-13)
即 ~12=-13
负数取反
~-12
-12
原码:1000 1100
反码:1111 0011
补码:1111 0100
补码按位取反:
~竞选学生会演讲稿 (1111 0100)=0000 1011 (按位取反后的补码为正数,其反码、原码相同)
反码:0000 1011
原码:0000 1011 (⼗进制:11)
即 ~- 12=11
按位取反技巧
⽆论正负数,先对数值本⾝加1,再改变符号位
12 符号位取反: 数值加1(12+1=13), 正变负, 即-13;
-12 符号位取反: 数值加1(-12+1=-11), 负变正, 即11;
本文发布于:2023-04-22 08:20:40,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/82/508981.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |