2024-11-17
计算机只有二进制,所有数据最后都要转成二进制。
世界上有10
种人,认识和不认识二进制的。
各进制与二进制的转化都比较快,所以可把该进制·转成二进制
,再互相转化。
快速方法:记住每个位权的值,直接相加即可
-3位 | -2位 | -1位 | 1位 | 2位 | 3位 | 4位 | 5位 | 6位 | 7位 | 8位 | 9位 | 10位 | 11位 | 12位 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0.125 | 0.25 | 0.5 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 |
比如:
101
涉及3位
和1位
,那么就是4+1=5
。
10010010.110
涉及到第2、5、8、-1、-2位。即2、16、128、0.5、0.25,相加得146.75
$$1\times2^7+1\times2^4+1\times2^1+1\times2^{-1}+1\times2^{-2}=146.75$$
特点:每4个数是一个位
0111 1011
每四位都是一个位。0111=7 1011=11,即十六进制的b。
所以对应的是0x7b
特点:每3个数是一个位
001 111 011
因此对应的就是001=1,111=7,011=3
所以对应的是0173
方法:先把所有数据列举出来,快速拼凑出数据。
13位 | 12位 | 11位 | 10位 | 9位 | 8位 | 7位 | 6位 | 5位 | 4位 | 3位 | 2位 | 1位 | -1位 | -2位 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4096 | 2048 | 1024 | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | 0.5 | 0.25 |
比如,260.75
即256+4+0.75,所以是第9位、第3位、第-1位、第-2位。所以结果是
100000100.11
整数部分:将十进制数字不断取余,并从后往前写出数字。
小数部分:将小数不断乘以2,取整数部分。
比如,260.75
整数部分:
260/2,余数0;
130/2,余数0;
65/2,余数1;
32/2,余数0;
16/2,余数0;
8/2,余数0;
4/2,余数0;
2/2,余数0;
1/2,余数1
整数部分,从后往前数是100000100
小数部分:
0.75x2=1.5,整数位1,小数位0.5;
0.5x2=1,整数位1,小数位0;结束
取整数位11
所以,整体结果是100000100.11
将十进制数字不断除以8,取余,并从后往前写出数字。
比如,123
123/8,余数3; 15/8,余数7; 1/8,余数1
所以,从后往前写是173
,八进制表示是0173
将十进制数字不断除以16,取余,并从后往前写出数字。
比如,123
123/16,余数11; 7/16,余数7;
所以,从后往前写是7b
,十进制表示是0x7b
计算机数据存储采取补码
形式存储,最高位是符号位
。
正数的原码、补码、反码都一样。
负数的原码:十进制转二进制,最高位设置为1
负数的反码:原码的基础上,最高位不变,其他位取反(0变1,1变0)
负数的补码:反码+1
如果是8位系统。
-11的原码为:
10001011
,其中第一位是符号位,0是整数,1是负数。
-11的补反码为:原码取反,符号位不变。
11110100
-11的补码:反码+1
11110101
如果对补码有疑问,可以参考为什么计算机要用补码表示-方便电路运算
1110 1011
是多少?
思考:
如果是正数,符号为0,正数三码合一反而简单。
题目中是负数,这个是补码。因为计算机底层是用补码存储的。
求反码:-1即可
1110 1010
求原码:取反,符号位不变
1001 0101
二进制转十进制:
-21