3.5.1、什么是二进制
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。
二进制中第一位是符号位,表示正负,0正数,1负数。例如:1的二进制 00000001
,-1的二进制 100000001
。
// 满二进一原则
1 2 3 4
00000001 00000010 00000011 00000100
5 6 7 8 9
00000101 00000110 00000111 00001000 00001001
3.5.2、十进制转二进制
十进制转换成为二进制将该数字不断除以2直到商为零,然后将余数由下至上依次写出,即可得到该数字的二进制表示。
125转换成为二进制:
125 / 2 = 62 ······ 1
63 / 2 = 31 ······ 0
31 / 2 = 15 ······ 1
15 / 2 = 7 ······ 1
7 / 2 = 3 ······ 1
3 / 2 = 1 ······ 1
1 / 2 = 0 ······ 1
当商为零时,将余数由下至上依次写出,即为125的二进制表示。
// 因为125是正数,所以符号位为0
125的二进制为:01111101
-520转换成为二进制:
520 / 2 = 260 ······ 0
260 / 2 = 130 ······ 0
130 / 2 = 65 ······ 0
65 / 2 = 32 ······ 1
32 / 2 = 16 ······ 0
16 / 2 = 8 ······ 0
8 / 2 = 4 ······ 0
4 / 2 = 2 ······ 0
2 / 2 = 1 ······ 0
1 / 2 = 0 ······ 1
当商为零时,将余数由下至上依次写出,即为-520的二进制表示。
// 因为520是负数,所以符号位为1
-520的二进制为:10000010 00001000
3.5.3、二进制转十进制
方法一:小数点前或者整数要从右到左用二进制的每个数去乘以2的相应次方并递增,小数点后则是从左往右乘以二的相应负次方并递减。
3.5.4、原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制
[+1]原码 = 01111101
[-1]原码 = 11111101
[01111101, 11111101] ==> [-125, 125]
3.5.5、反码
- 正数的反码是其本身
- 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反
[+1] = 01111101[原码] = 01111101[反码]
[-1] = 11111101[原码] = 10000010[反码]
3.5.6、补码
注意:计算机在底层储数据的时候,使用的是补码
-
正数的补码就是其本身。
-
负数的补码是在其原码的基础上, 符号位不变,其余各位取反,最后+1 (即在反码的基础上+1)
[+1] = 01111101[原码] = 01111101[反码] = 01111101[补码]
[-1] = 11111101[原码] = 10000010[反码] = 10000011[补码]
3.5.7、字符编码
什么是字符编码?
- 字符编码是人为的定义的一套转换表。
- 在字符编码中规定了一系列的文字对应的二进制。
- 字符编码其实本质上就是一本字典,该字段中描述了文字与二进制之间的对照关系。
- 字符编码是人为规定的(是某个计算机协会规定的)
字符编码涉及到编码和解码两个过程中,编码和解码的时候必须采用同一套字符编码方式,不然会出现乱码。
关于字符编码的发展过程,起初的时候计算机是不支持文字的,只支持科学计算。
实际上计算机起初是为了战争而开发的,计算导弹的轨道......
后来随着计算机的发展,计算机开始支持文字,最先支持的文字是英文,英文对应的字符编码方式是: ASCII码。
ASCII码采用1byte进行存储,因为英文字母是26个(键盘上所有的键全部算上也超不过256个,1byte可以表示256中不同情况。所以英文本身在计算机方面就占有优势)
a代表数字是97,进行编码后是01100001,进行解码是a,假如编码和解码不是同一种方式就会出现乱码
‘a’ ---> 97 01100001
‘b’ ---> 98 01100010
......
‘A’ ---> 64 01000000
‘B’ ---> 65 01000001
......
‘0’ ---> 48 00110000
‘1’ ---> 49 00110001
......
随着计算机语言的发展,后来国际标准组织制定了ISO-8859-1编码方式,又称为latin-1编码方式,向上兼容ASCII码,但不支持中文。
后来发展到亚洲,才支持中文、日文、韩文...
中文这块的编码方式:GB2312 < GBK < GB18030(容量关系)
繁体中文:big5(*使用的是大五码)
而Java语言为了支持全球所有的文字,采用了一种字符编码方式叫做unicode编码。Unicode编码容纳了全球所有的文字,支持所有的文字。常见包括有:UTF-8 UTF-16 UTF-32...
原创博主:Little Tomcat
博主原文链接:https://mp.weixin.qq.com/s/1BO_DRstr9I5KAlqJ84eMA