目 录CONTENT

文章目录

位运算基本概念

MWSFOT
2023-02-03 / 0 评论 / 0 点赞 / 312 阅读 / 1,152 字

补充概念

一文读懂二进制补码 - 从计数原理开始说起
二进制的原码、反码、补码

前置概念

  1. 原码 补码 反码概念及相互转换
  2. 这是内存中的保存形式
  3. 我们读取的十进制是根据原码来读取,而在内存中,数值都是以二进制补码形式保存的

原码 补码 反码概念及相互转换

计算机存储数据是以2进制形式存储, 即由0和1组成的数据, 因为在冯·诺依曼计算机体系结构中只存在加法运算器,
且 加法运算器就能完成负数运算,比如减去一个数可以看成加上这个数的相反数,原码、反码、补码的产生过程就是
为了解决计算机做减法和引入符号位的问题

1.整型以补码的形式转化成二进制存储
2.字符则先按照ASCLL码转化成所对应的十进制整数,再按照整型处理
3.而实数按照二进制浮点数算术标准(IEEE 754标准)转化成二进制存储

原码,补码,反码概念

原码

是有符号数的一种二进制表示方式, 由符号+其他二进制构成一个整数,最左位符号1或0 代表负数和正数

正数 原码 负数 原码
0 0000 -0 1000
1 0001 -1 1001
2 0010 -2 1010
3 0011 -3 1011
4 0100 -4 1100
1 + 1    => 0001 + 0001 => 0010 = 2 
1 + (-1) => 0001 + 1001 => 1010 = -2
0 + -0   => 0000 + 1000 => 1000 = -0
可以看出负数参与运算后产生了奇奇怪怪的结果,这都是因为符号位导致的
特点
  1. 原码表示直观,与真值转换方便
  2. 0有两种不同表示形式, 给使用带来了不便
  3. 原码进行加减运算想保证结果正确运算过程复杂

反码

正数不变, 将原码除了符号位全部取反的操作. 0变1 , 1变0.

正数 反码 负数 反码
0 0000 -0 1111
1 0001 -1 1110
2 0010 -2 1101
3 0011 -3 1100
4 0100 -4 1011
1 + 1    => 0001 + 0001 => 0010 = 2
1 + (-1) => 0001 + 1110 => 1111 = -0
0 + (-0) => 0000 + 1111 => 1111 = -0
结果对,但是符号位不对 想要得到的结果是 1 +(-1) 应该为 0000 
反码的特点
  1. 在反码中, 符号也是表示为数值的正负.
  2. 在反码中, 数值0也有两种表示
  3. 反码的表示范围与原码范围相同

补码

类似原码, 理解为原码的绝对值. 模和同余数的概念. 正数的补码等于它的原码, 负数的补码等于反码 末位+1 也可以直接取反末位+1,这里 原码和反码可以看出不利于直接做加法运算,且0会有正负的表示方式,所以就引申出补码

正数 补码 负数 补码
0 0000 -0
1 0001 -1 1111
2 0010 -2 1110
3 0011 -3 1101
4 0100 -4 1100
1 + 1    => 0001 + 0001 => 0010 = 2
1 + (-1) => 0001 + 1111 => 0000 = 0
0 + (-0) => 0000 + 0000 => 0000 = 0 // -0不存在补码 只有0000一种表示方式
1 + (-3) => 0001 + 1101 => 1110 = -2
结果上没问题
如果A与B的补码相加,产生溢出(进阶), 溢出部分要被去掉
相当于: 
5 - 3 = 5 + ( 7 - 10 )= 5 + 7 -10 = 12 - 10 因为进阶了,所以要去10
也就是说放到四位2进制就是如果得出结果10010就要减去10000?得到0010
补码的特点
  1. 在补码中,用符号位表示数值的正负,与原码相同
  2. 补码中数值0只有一种表示
  3. 补码的符号位可以参与运算
  4. 计算机中采用补码进行加减运算
  5. 负数补码的表示范围比负数原码的表示范围略宽。纯小数的补码可以表示到-1,纯整数的补码可以表示到-2^n

位运算

>> 右移

5 >> 2
右移 2 位 左补2位00

<< 左移

5 << 2
左移 2 位 右补2为00

>>> 符号右移

-5 >>> 2
不带符号右移 2 位, 符号位变0 正数左补00 负数左补10

& 位与

5 & 2
2进制都为1才为1

| 位或

5 | 2
2进制有一个为1就为1

^ 位异或

5 ^ 2
2进制不相同即 一个为1 一个为0 则为 1

~ 位非

~ 5
2进制取反 0变1 1变0

0

评论区