进制记忆法
- 二进制转换十进制/十进制转换2进制
记忆法关键词
x x x x x x x x
7 6 5 4 3 2 1 0
128 64 32 16 8 4 2 1
例:假设有个数字是55;那么怎么换算为十进制;首先要明白我的128-1的这几个数字。也可以不理解,我们说个简单的方式,在这几个数字中哪几个数字可以达到55.
不可以重复使用,顺序从左到右。
55=32+16+4+2+1;
当这几个数字等于55时候,同时二进制数字也就出来了,上面从128-1一共八个数
那么所使用过的数字32、16、4、2、1,分别定义为1;
结果就是:0011 0111;
反之反向推理也是可以的;
反向操作
x x x x x x x x
7 6 5 4 3 2 1 0
128 64 32 16 8 4 2 1
已知上面结果为110111二进制;
补全八个数,也就是0011 0111
结果就是 32+16+4+2+1=55;
补码
补码注意点在于,负数可以补码,正数无需补码
-23
先算正数23
0001 0111
上面2进制是正数,我们进行补码
补码方式
例如
0011 0010
从右往左,开始,遇到1后,后面所有数字反转。第一个1照抄,其实做了两个操作
第一是:负数正常二进制第一个数需要改1,还有一个是,末尾需要加一,而这个操作是相当于个这个数同时做了
1100 1110;这个就是补码后的效果;
浮点数方式
浮点数往左移加平方,反之如此
例:十进制浮点数:1234
如果浮点数往左位移一位(123.4)
# 注:<sup>代表次方,<sup>数字在上,<sub>数字在下
那么运算结果就是123.4x10<sup>1</sup>
如果右移(12340)结果则是:
12340x10<sup>-1</sup>
2进制浮点数:1001 0010.
运算如果浮点数左移两位后(100100.10)
结果则是:100100.10x2<sup>2</sup>
同理浮点数右移两位后(1001001000)
结果则为:1001001000x2<sup>-2</sup>
记忆点:多少x多少次方代表意思是,
当前你数字的进制乘你左右位移的位数。
IEEE754
1 0000 0000 0000 0000 0000 0000 0000 0001
-1 1111 1111 1111 1111 1111 1111 1111 1111
1.0 0 (0111 1111) 000 0000 0000 0000 0000 0000
-1.0 1 (0111 1111) 000 0000 0000 0000 0000 0000
假设思路:
745:754编号的标准
假装这个一个图片:
符号 尾数 指数
⬇️ ⬇️ ⬇️
- 1. 01 x 2<sup>-24</sup>
IEEE754 | 存储单元 | 符号位 | 指数位 | 尾数位 |
---|---|---|---|---|
单精度(余127) | 4byte | 1 | 8 | 23 |
双精度(余1023) | 8byte | 1 | 11 | 52 |
##上方为表格。
例题:(101.11)2 转单精度
按照我的思路线规范化,原因我也不知道,
但是需要这么做:1.0111x22 将小数点左移两位形成这样的数值,然后就开始计算了。
首先拿到指数也就是所谓的2(也可以说形容二进制的2),其次,拿取单精度的余数127
然后就得到129,去转8bit无符号存储单元=》 1000 0001
最后计算位数位,尾数位就算的是《.》后的所有数字0111
在这之后补够尾数位23位,上面表格有尾数位。
结果就是0111 0000 0000 0000 0000 000
得到的单精度显示:
符号位 | 指数位 | 尾数位 | |
---|---|---|---|
单精度 | 0 | 10000001 | 0111 0000 0000 0000 0000 000 |
双精度同理,看看吧:
(-10100001.111)2转双精度表示
1. 规范化 -10100001.111 = -1.0100001111 x 2<sup>7</sup>
2. 计算指数位,7 + 1023 = 1030 转11bit无符号存储单元 => 100 0000 0110
3. 计算尾数位,尾数位0100001111 后面补0,补够52位 => 0100 0011 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
4. 计算符号位,负数符号位为0
符号位 | 指数位 | 尾数位 | |
---|---|---|---|
双精度 | 1 | 100 0000 0110 | 0100 0011 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 |
逻辑运算
##转码
正数不可用补码
负数运算是可用例题
0000 0000
从左往右遇到1后所有位反转
-30x2
0001 1110
1110 0010补码
1100 0100左移一位
0011 1100补码
32+16+8+4=-60
算乘法左移一位,由右向左,乘法右边补0
-30➗2
0001 1110
1110 0010补码
1111 0001右移一位
0000 1111=8+4+2+1=-15
除法运算向右移一位,这里重点,左边补1
-19-23题目
0001 0011 19的二进制
0001 0111 正数23二进制
1110 1001 因为是负数,所以补码
-
0001 0011
1111 1100 等式相加,没什么好说的0000 0100=-4//这里,因为你算出来肯定是负数,补码,重点,如果不对,看看上面有没有算错,最后补码才能得出来正确的数字,不然必然溢出,答案也不对。
以上内容均为自己理解,不作为准确定理。 选择性观看,持续跟新进度,喜欢感谢关注 CSDN博主:One_Gun