目录
1.进制
我们常听说 10进制、2进制、16进制、8进制等说法,他们分别是什么意思呢?
1.1 10进制
生活中,最常用的就是10进制。
(1)10进制的规则就是:逢10进1,各个数位上的数字大于等于0,小于等于9
(2)一个数的大小就等于这个数各个数位上的数字乘以它的权重
(3)从右向左,各个数位上的权重位 ...,10^(-1), 10^0, 10^1, 10^2, 10^3 ........
10进制中: 123 = 1 * 10^2 + 2 * 10^1 + 3 * 10^0
为了与其他进制进行区分, 将相应的数字用括号括起来,并在右下角标明进制
1.2 2进制
依样画葫芦,
(1)2进制的规则就是:逢2进1,各个数位上的数字大于等于0,小于等于1
(2)一个数的大小就等于这个数各个数位上的数字乘以它的权重
(3)从右向左,各个数位上的权重为...,2^(-1), 2^0, 2^1, 2^2, 2^3 ........
2进制中: 1001 = 1 * 2^3 + 0 * 2^2 + 0* 2^1 + 1 * 2^1
为了与其他进制进行区分, 将相应的数字用括号括起来,并在右下角标明进制
1.3 8进制
依样画葫芦,
(1)8进制的规则就是:逢8进1,各个数位上的数字大于等于0,小于等于7
(5) 编程语言中常在8进制数值前面加上: 0
(2)一个数的大小就等于这个数各个数位上的数字乘以它的权重
(3)从右向左,各个数位上的权重位...,8^(-1), 8^0, 8^1, 8^2, 8^3 ........
8进制中: 4331 = 4 * 8^3 + 3 * 8^2 + 3* 8^1 + 1 * 8^1
为了与其他进制进行区分, 将相应的数字用括号括起来,并在右下角标明进制
1.3 16进制
依样画葫芦,
(1)16进制的规则就是:逢16进1,各个数位上的数字大于等于0,小于等于15
(2)当数字大于的等于10时, a (A),b(B) , c (C), d (D), e (E), f(F)
分别表示10, 11 , 12 ,13, 14, 15
此时字母大小写都可,一般要么全大写,要么全小写
(5) 编程语言中常在16进制数值前面加上: 0x
(3)一个数的大小就等于这个数各个数位上的数字乘以它的权重
(4)从右向左,各个数位上的权重位 ...,16^(-1),16^0, 16^1, 16^2, 16^3 ........
16进制中: 4ac1 = 4 * 16^3 + 10 * 16^2 + 12* 16^1 + 1 * 16^1
为了与其他进制进行区分, 将相应的数字用括号括起来,并在右下角标明进制
1.4总结
了解不同进制,需要了解它各个数位的权重以及数位上数字的范围
2.进制之间的转换
2.1 10进制转2进制
示例 十进制的123转为2进制是多少?
123 / 2 = 61 ...1
61 / 2 = 30 ... 1
30 / 2 = 15 ... 0
15 / 2 = 7 ... 1
7 / 2 = 3 ...1
3 / 2 = 1 ... 1
1 / 2 = 0 ... 1
所以答案是 1111011
(1)方法就是 首先用该数除以2,得到第一个商 和 第一个 余数
再用第一个商除以2,得到 第二个商 和 第二个余数
以此类推,直到 商为0,再将余数从下至上排好顺序,就把10进制数转化为2进制数啦
(2)当然,还有一种稍微简单的算法就是 “dou”
123 = 64 + 32 + 16 + 8 + 2 + 1 = 2^6 + 2^5 + 2^4 + 2^3 + 2^1 + 2^0
所以123的2进制数就是 1111011
2.2 2进制转10进制
(1)只需要将2进制各个数位上的数字乘以相应的权重即可
2进制数 1111011 = 2^6 + 2^5 + 2^4 + 2^3 + 2^1 + 2^0 = 123
2.3 2进制转8进制
(1)我们知道一个3位2进制数最大为7,8进制每个数位最大值也为7,
2^0+2^1+2^2 = 7*8^0, 即2进制数111 = 8进制数7
2^3+2^4+2^5 = 7*8^1 即2进制数111000 = 8进制数70
所以将2进制数3个数位3个数位组合在一起,依次计算写下即可
(2)示例: 2进制数 1111011转化为 8进制是多少?
1111011 = 001 111 011(从右向左3位为一组,不足3位的在左边补0)
所以该2进制数转化为8进制为 173
2.4 2进制转16进制
(1)我们知道一个4位2进制数最大为15,16进制每个数位最大值也为f (F),
2^0+2^1+2^2 +2^3 = f*16^0, 即2进制数1111 = 16进制数f
2^3+2^4+2^5+2^6 = f*16^1 即2进制数11110000 = 16进制数f0
所以将2进制数4个数位4个数位组合在一起,依次计算写下即可
(2)示例: 2进制数 1111011转化为 16进制是多少?
1111011 = 0111 1011(从右向左4个数位为一组,不足4位的在左边补0)
所以该2进制数转化为16进制为 7b
3.原码、反码、补码
3.1介绍
(1)针对于整数的2进制表示方法,有原码、反码、补码的说法
(2)有符号整数的三种表示方法由符号位与数值位两部分组成,
最高位的1位为符号位,其余的就是数值位
符号位上0表示正数,1表示负数
(2)无符号整数没有符号位,只能表示正数和0,
由于缺乏符号位,所以不需要区分原码反码补码
无符号整数的二进制表示就是其真实的数值表示
(3)正整数的原码反码补码相同,负整数各不相同
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码
(4)补码得到原码也是可以使⽤:
-1,取反的操作 或者 取反,+1的操作。
(5)示例:(假设只有8位)
123的原码反码补码是:01111011
-123的原码是11111011 反码是10000100 补码是10000101
补码转为原码:
(1)-1,取反
10000101 ---> 10000100 ---> 11111011
(2)取反, +1
10000101 ---> 11111010 ---> 11111011
3.2补码以及使用原因
在计算机系统中,数值一般采用补码的形式进行存储
原因:(1)cpu只有加法运算器,补码可以统一加减法运算
(2)补码可以统一处理符号位和数值位
(3)补码原码之间的相互转换过程相同,不需要额外的硬件电路