1.十进制与二进制相互转换
1.1 十进制转为二进制
1.1.1 正整数转二进制
除二取余,倒序排列,高位补零。
注:计算机内部表示数的字节单位是定长的,如8位,16位,或32位。所以,位数不够时,正数原码,反码,补码:整数高位补0,小数低位补0。
1.1.2 负整数转二进制
先将对应的正整数转换成二进制后,对二进制取反,然后对结果再加1。
以上实际为,把对应的负数取二进制原码,再取反码,最后取补码。补码即为对应的二进制值。
注:计算机内部表示数的字节单位是定长的,如8位,16位,或32位。所以,位数不够时:
- 负数原码:整数高位补0,小数低位补0;
- 负数反码:整数高位补1,小数低位补1;
- 负数补码:整数高位补1,小数低位补0;
1.1.3 小数转二进制
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又 得到一个积,再将积的整数部分取出,如此进行,直到积中的整数部分为零,或者整数部分为1,此时0或1为二进制的最后一位。或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
如:0.625=(0.101)B
0.625*2=1.25======取出整数部分1
0.25*2=0.5========取出整数部分0
0.5*2=1==========取出整数部分1
再如:0.7=(0.1 0110 0110...)B
0.7*2=1.4========取出整数部分1
0.4*2=0.8========取出整数部分0
0.8*2=1.6========取出整数部分1
0.6*2=1.2========取出整数部分1
0.2*2=0.4========取出整数部分0
0.4*2=0.8========取出整数部分0
0.8*2=1.6========取出整数部分1
0.6*2=1.2========取出整数部分1
0.2*2=0.4========取出整数部分0
1.2 二进制转十进制
1.2.1 整数二进制转十进制
方法一:二进制转为十进制要从右到左用二进制的每个数去乘以2的相应次方(次方从0开始),再将其每个数进行相加。
例如:(1101)2转十进制:
在这里插入图片描述
方法二:先把2的次方依次排列出来,再将二进制数倒序依次排列,最后再把对应1的相加起来,0不加,具体如图:
在这里插入图片描述
即1+4+8=13。
1.2.2 二进制小数转为十进制
操作 | 整数位 | 小数点 | 小数点后一位 | 小数点后两位 | 小数点后三位 | 小数点后四位 | 结果 |
---|---|---|---|---|---|---|---|
0 | . | 1 | 1 | 1 | 1 | 0.1111 | |
换算次方 | 2^(0) | . | 2^(-1) | 2^(-2) | 2^(-3) | 2^(-4) | |
换成分数 | 0/2 | . | 1/2 | 1/4 | 1/8 | 1/16 | |
换成十进制 | 0 | . | + 0.5 | +0.25 | + 0.125 | +0.0625 | 0.9375 |
1.3 有符号数和无符号数
其实就是正数和负数,最高位(第一位)是符号位,正数符号位为“0” ,负数符号位为“1” 。如 1和-1表示为如下
0000 0001
1000 0001
1.4 二进制的原码、反码、补码
1.4.1 原码
原码就是机器数,是加了一位符号位的二进制数(因为数值有正负之分)
如1和-1的原码表示为如下:
0000 0001
1000 0001
1.4.2 反码
正数的反码与其原码相同。负数的反码是对其原码逐位取反,但符号位除外。一般用于原码转补码,或补码转原码的过渡码。
8位二进制码能表示的反码范围是-127~127。
8位的-128没有反码。
首先看-0,[-0]原码=1000 000,其中1是符号位,根据反码规定,算出[-0]反码=1111 1111,再看-128,[-128]原码=1000 000,假如让-128也有反码,根据反码规定,则[-128]反码=1111 1111,你会发现,-128的反码和-0的反码相同,所以为了避免面混淆,有了-0,便不能有-128,这是反码规则决定的。
1.4.3 补码
正数的补码和正数的原码完全一样,负数的补码等于负数的反码+1。
所有的二进制在计算机中都是以补码的形式存储的。
2.位运算
符号 | 描述 | 运算规则 | 实例(以四位二进制数为例) |
---|---|---|---|
& | 与 | 两个位都为1时,结果才为1。 | 0001&0001=1,0001&0000=0,0000&0000=0000 |
| | 或 | 两个位都为0时,结果才为0。 | 0001|0001=0001,0001|0000=0001,0000|0000=0000 |
^ | 异或 | 两个位相同为0,相异为1。 | 0001 ∧ 0001 = 0000 , 0001 ∧ 0000 = 1 , 0000 ∧ 0000 = 0 |
~ | 取反 | 0变1,1变0。 | ~0 = 1 , 1 = 0 |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0。 | 0001 < < k = 0100 , k = 2,k kk是左移的位数,这里k = 2 |
>> | 右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,右移补1 11。 | 0100 > > k = 0001 , k = 2 k是右移的位数,这里k = 2 |