01.02 笔记-二进制及位运算
2019-01-02 本文已影响0人
xxxQinli
计算机存数据只能存数字数据,而且是二进制的补码
计算机对数据进行运算的时候使用补码进行运算的,将数据从计算机中读出来,显示的是原码
什么是补码
1. 原码
- 符号位+真值
- 说明
-
符号位:最高位用0表示正数,用1表示负数
-
真值:去掉正负符号后,数字对应的二进制
- X(符号位) XXXXXXX XXXXXXXX(值,2的十五次方减一)
- 求二进制的值加符号位就是原码
100的原码:0 1100100
-100的原码:1 1100100
-
2. 反码
- 负数的反码:原码的符号位不变,其余的位数取反,0变1,1变0
- 正数的反码就是它本身,原码
- 100的反码:0 1100100
- -100的反码:1 0011011
- 反码的存在就是为了算补码
3. 补码
- 正数的补码:原码
- 负数的补码:反码加1
- 100的补码:0 1100100
- -100的补码:1 0011100
练习: -50的原码、反码、补码
原码:1110010
反码:1001101
补码:1001110
为什么要存补码,因为计算机里只有加法器,没有减法器
位运算:
&(按位与) |(按位或)~(按位取反)^(按位异或)>>(右移) <<(左移)
参与运算的都是补码,位运算的执行效率要高很多
- 与运算 &
数字1 & 数字2 - 有0就是0
参与运算的都是补码:0111 & 1101 --> 每一位上分别与 若都为1,则为1,有一个是0,就是0,0101
特点:一个位上的数如果和1与,可以保留这个数,和0与,可以置0
- 应用:判断一个数的奇偶性,二进制最后一位是否是1,是1位奇数,是0为偶数,比一般的效率高
num % 2 == 0 ---> 偶数 普通方法
num & 1 == 1 ---> 奇数 效率高的方法
num & 1 == 0 ---> 偶数 效率高的方法
- 或运算 |
只要有1,就是1
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
- 特点:和1或就是1,与0或与0
-
取反 ~
~ 数字
~ 1 ----> 0
~ 0 ----> 1
补码取反,要反着求回原码
去反两次等于本身,连续两个波浪号 -
异或^
相同为0,不同为1
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
- 应用:设密码,将密码与另一个值异或,得到另外的值
异或两次得到原来的值
- 左移<< 右移>>
数字1 << N, 数字1左移N位
数字1 >> N, 数字1右移N位
- 规律:左移是*,数字1 * (2 ** N),右移动是/ 数字1 // (2 ** N)
- 应用:快速乘2的次方,快速除2的次方,比乘除效率高
4 << 1 = 8
-3 << 2 = -12
5 >> 2 = 1