进制的转换和变量
数据的存储
【注】我们使用计算机是为了储存数据,计算(处理)数据。
【问】计算机如何存储数据呢?
【答】要弄清计算机如何存储数据,首先要弄清计算机如何存储数字。
1.二进制数
// 计算机存储数据最适合使用二进制,即使用0,1两个数表示所有的自然数
【例】
十进制: 0 1 2 3 4 5 6 7 8 9
二进制: 0 1
采用二进制,机械容易实现
1bit 导通三极管
8bit == 1字节
1024字节 == 1K
1024kb == 1M
1024mb == 1G
1024gb == 1T
(1) 十进制转换成二进制
67(10) == 100 0011(2)
66(10) —> ?(2)
2 — 33 ——0
2 — 16 ——1
2 — 8 —— 0
2 — 4 —— 0
2— 2 ——- 0
2 — 1 —— 0
2—————1
从下向上 66即 1 000 010
(1)十进制转成二进制(除2 记余数 从下向上写出来) //倒除法
(2)二进制转十进制
1001110 (最低位 0位 相当于十进制的个位)
// 用当前位的数字(1/0)乘以2的位数次方
100 1110 = 0*2^0 + 1*2^1 +1*2^2 + ……
简化后拿出1的次方数之和 2^1 + 2^2 + 2^3 + 2^6
(3) 八进制和十六进制
// 这两个进制既具备一定的可读性,又能快速地转换成二进制数
八进制: 0 1 2 3 4 5 6 7
7 + 1 = 10 —— 10(8)
十六进制: 0 1 2 3 4 5 6 7 8 9 A B C D E F
F + 1 = 10 —— 10(16)
*1*八进制转二进制
34(8) ——> 011 100(2)
67(8) ——> 110 111(2)
【三位一取】 八进制的一位相当于二进制的三位,转换的时候以十进制为准(即当前八进制数的十进制0—7)
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
*2*十六进制转二进制
【四位一取】 十六进制的一位相当于二进制的四位,转换的时候以十进制为准
34(16) ——> 0011 0100
5a(16) ——> 0101 1010
*3*二进制转换成八进制和十六进制
【三位一取】
【四位一取】
【原则】从低位开始取
100100101 ——》 445(8)
*4*八进制和十六进制的应用举例
权限: 增加可读性 和 书写便利
颜色: 使用十六进制表示
#FFFFFF 白色
#000000 黑色
75 3d 61 11 1101
156 6e 110 110 1110
(4).原码、反码和补码
<1>原码
【注】 计算机存储数据,要先开辟空间,再储存数据
开辟空间的最小单位是字节
【注】存储数据时,用最高位表示符号,其他位表示数值的大小。用0表示正数,1表示负数
如果想存储一个6,必须先规定分配多少字节。
0000 0110
0000 0000 0000 0110
如果想存-6
1000 0110
1000 0000 0000 0110
规定了字节数,写明了符号位,我们得到了6的原码。
【思考】用一个字节存储1和-1的原码,讨论计算机是否可以以原码形式存储二进制数。
0000 0001 1
1000 0001 -1 +
= 1000 0010 -2 (与预期结果不同)
【结论】 计算机不能以原码形式存储数据,否则影响运算
<2>反码
正数的反码就是原码,负数的反码是原码符号位不动,其他位按位取反(1变0,0变1)
【例】求3和-4的反码 (以1字节为准)
0000 0011 原码 反码 3
1000 0100 原码 -4
1111 1011 反码 -4
【练习】求2字节下,8和-15的原码和反码
0000 0000 0000 1000 原码、反码
1000 0000 0000 1111 -15原码
1111 1111 1111 0000 -15反码
【结论】计算机不能以补码形式存储数据。
<3>补码
计算机以补码的形式存储数据。
正数的原码、反码、补码三位一体,负数的补码是反码加1.
6与-6的补码
0000 0110 原码 即补码
1000 0110 -6原码
1111 1001 -6反码
1111 1010 -6补码
【思考】 用一个字节存储1和-1的补码,讨论计算机是否可以补码形式存储二进制数。
0000 0001 1
1111 1111 -1 +
= 1 0000 0000 (最高位的1溢出了)
【结论】计算机以补码存储数据。
【练习】1字节,求7,-56,-9的补码
0000 0111 7的补码
1011 1000 -56的原码
1100 0111 -56的反码
1100 1000 -56的补码
1000 1001 -9原码
1111 0110 -9反码
1111 0111 -9补码
【思考】 为什么补码称作补码?
【思考】 给你一个补码,如何知道这个补码表示多少?
【注】 对补码再求一次补码会得到原码
1111 1010
1000 0101
1000 0110 -6的原码
1111 1111 -1 +
1111 1111 -1
= 1111 1110 补码
1000 0001 反码
1000 0010 原码 -2