文章目录
1.计算机为什么采用二进制?
最初的时候,计算机是由二极管发展而来的。每个二极管能表达二种信号,就是接通电路或关闭电路两种状态(1 & 0)如果有2个二极管,就可以根据顺序,表达出4种状态(00 & 01 & 10 & 11), 那么如果有N个二极管,那就可以表达出二的N次方(2ⁿ)个状态。根据这种理论,就可以保存的信息就很多。最终需要做的就是,00代表啥,01代表啥,11代表啥,定义好之后,所有的组合到一起,就成了语句或十进制数字了。
2.比特位(bit)与字节(Byte)的关系?
1.比特位(bit)的引入?
上面讲到二进制的引入,为了表达每一个二极管(比特位)的信息,把这个最小的信息单元叫比特位。每个比特位存放0或1。
2.字节(Byte)的引入?
1字节(byte,字节)= 8 bit
- 字节来自英文Byte,音译为“拜特”,习惯上用大写的“B”表示。
- 字节是计算机中数据处理的基本单位。计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即1个字节等于8个比特(1Byte=8bit)。
- 八位二进制数最小为00000000,最大为;
- 通常1个字节可以存入一个ASCII码(128个字符),2个字节可以存放一个汉字国标码。
字节 –百度百科
个人理解是:
- 如果一篇英文文章没有把单词、标点、段落等分开,会非常不便于阅读,例如helloworldmynameisalien,这个你根本不知道啥意思,但是hello world, my name is alien ,你就知道啥意思了。
- 所以,计算机为了阅读二进制数,把一个字节(8位二进制)区分开来,当做一个单词或者字,然后再去阅读。
00001111 类似这样的,计算机看做为3个字
3.为什么一个字节是8位二进制,而不是其他数目?
可以看一下ASCII的定义,应为早期的ASCII为了表达出所有需要表达的字母和一些特殊符号,发现8位二进制就能基本表达所有英文字母、特殊符号了。详情可参考如下链接,这样我们就可以把8位二进制当做一个字节,去代表一个计算机能识别的最小语言单位。
3.二进制与八进制、十进制、十六进制之间的转换?
1.八进制、十六进制的定义?
八进制
- 八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。
- 八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。
十六进制
- 十六进制(英文名称:Hexadecimal),同我们日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9,A-F对应10-15。
- 十六进制的数和二进制数可以按位对应(十六进制一位对应二进制四位)
- 内存中保存数据以及内存地址,都是十六进制
2.二进制与八进制之间的转换?

3.二进制与十六进制之间的转换?

4.二进制与十进制之间的转换?
十进制转化二进制的方法(除2倒序取余法):
用十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。

十进制的小数转换成二进制(小数乘二正序取整法):
小数部分和2相乘,取整数,不足1取0,每次相乘都是小数部分,顺序看取整后的数就是转化后的结果。

如上这种方法保存小数,容易产生数据精度失真的情况。原始数据可能一摸一样,但最终保存到计算机中,内容是一样的。后面会提到单精度和双精度小数的问题。

通过如上的转换,我们发现无论计算机需要存储多少位二进制,例如,我们都不用担心不方便阅读的问题,因为我们可以根据不同的进制去读取,虽然存储都是以二进制形式存储的。所以,最终计算机会根据实际的应用场景,会使用十六进制、八进制的格式去存储信息。
5.二进制、八进制、十进制、十六进制对照表
| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
| 16 | 10000 | 20 | 10 |
4.内存中为什么使用十六进制?
- 前面提到,我们把八个比特位当做一个字节,字节又是计算机存储信息的最小单位。如果想充分利用比特位的信息,每个比特位都完全利用上,就能充分利用每个比特位上的存储空间。(重要, 重要,重要!!!!)
- ASCII码–百度百科 里面,总共存储了128个字符,占用的是一个字节。但其实,一个字节可以有2的8次方(2^8=256)可能,也就是说,ASCII其实还是可以拓展信息的,有一半空间没有充分利用。
- 十六进制(0–9, A、B、C、D、E、F)共计十六个数,可以理解为(2^4)个信息。
- 而一个字节是(2^8)个信息, 那么一个字节正好可以保存2个十六进制数据,且完全利用上所有比特位。

内存中,一个字节的十六进制数据可以对应二进制是4个字节,所以内存中,存储数据的空间利用率非常高效。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227469.html原文链接:https://javaforall.net
