如何通俗的理解二进制的意义(了解二进制及二进制的概念)
如何通俗的理解二进制的意义(了解二进制及二进制的概念)8421码是中国大陆的叫法 它是BCD码中最常用的一种 这种编码方式中每一位二进制代码的1都是代表一个固定的数值然后把每一位1代表的数的十进制数加起来 得到的结果就是它所代表的十进制数码十进制到任意进制之间的转换 十进制转换到2 8 16进制 规则: 除以基数取余数 直到商为0 余数反转 十进制:10 "转二进制" 2|10 0 ---- 2|5 1 ---- 2|2 0 --- 2|1 1 ---- 0 结果:二进制的 0b1010 反推 0*2^0 1*2^1 0*2^2 1*2^3=0 2 8=10 "转八进制": 8|10 2 ---- 8|1 1 --- 0 结果:八进制 012 反推: 2*8^0 1*8^1=2 8=10 "转16进制" 16|200 8 ---- 16|12 c=12 ---- 0 结果: 16进制
1、进制的概念进制也就是进位计数制,是人为定义的带进位的计数方法;对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位
我们日常生活中有很多进制的例子,例如:
- 一分钟六十秒,逢六十进一,就是六十进制;
- 一天二十四小时,逢二十四进一,就是二十四进制;
- 一星期七天,逢七进一,就是七进制;
- 一年十二个月,逢十二进一,就是十二进制;
- 小学数学是逢十进一,就是十进制;
二进制、八进制、十进制、十六进制
2.2进制产生的原因产生这些进制的原因: 有二进制是因为计算机最底层的电子元器件只有两种状态(高电平/低电平,也就是有电没电)所以任何数据在计算中都是以二进制的形式存在的 二进制早期由电信号开关演变而来 一个整数在内存中一样也是二进制的 但是使用一大串的1和0做成的数值进行使用很麻烦. 有八进制 十六进制的原因是因为二进制表示的同数值太长不方便记忆和阅读 而八进制和十六进制较短 方便阅读记忆
2.3计算机中的存储单位的换算bit: 二进制的每一位都是一个bit 二进制只能是0/1两个数字组成 是计算机中最小的信号单元也就是一个bit 只能 表示两种信号或两种状态 表示范围很小 可能是高/低电平
byte: 字节 一个bit表示的范围很小 不够用 字母就有26个 一个bit才能表示2个 除了字母还有很多其他符号呢 -128~127 256
所以国际标准组织规定把8个bit归为一个数据的最小单元!
1位二进制数可以表示两种状态
0 1
2位二进制数可以表示的状态个数就是2的2次幂 4种
00 01 10 11
3位二进制数可以表示的状态个数就是2的3次幂 8种
000 001 010 011 100 101 110 111
8位二进制数可以表示的状态个数就是2的8次幂 256种 也就是1byte代表256种状态
换算方式
8bit=1byte(字节)
1kb = 1024byte KB千字节 2的10次方
1MB = 1024KB MB兆字节
1GB = 1024MB
1TB = 1024GB
16GB的U盘,厂家换算成字节:16*1000*1000*1000,实际上换算:16*1000*1000*1000/1024/1024/1024≈14.9G
2.4不同进制的组成标志
jdk7之后支持
二进制: 由0 1组成 以0b开头 0b11100021
八进制: 由0-7组成 以0开头
十进制: 由0-9组成 整数默认是十进制的没有前后缀
十六进制: 由0-9 A B C D E F(大小写都可以)组成 以0x开头
十进制: 10 值:10
二进制: 0b10 值:?
八进制: 010 值:
十六进制:0x10 值:
代码演示:
int a=100;//十进制
System.out.println(a); //十进制显示
int b=0b100;//二进制 组成的数字只能出现0/1
System.out.println(b);//十进制显示
int c=0100;//八进制
System.out.println(c);//十进制显示
int d=0x100;//十六进制
System.out.println(d);//十进制显示
2.5相同进制之间的计算
十进制
10 10=20
二进制
0b1101
0b1101010
----------
0b1110111
八进制
0127
0765
----
01114
十六进制
0x1ab
0x99a
------- a=10 b=11 c=12 d=13 e=14 f=15
0xb45
2.6进制之间的转换2.6.1任意进制到十进制的转换
转换规则:任意进制到十进制的转换都等于: 这个数的各个位上的系数乘以基数的权次幂相加的和
任何除0以外的数的0次方都是1 。如3的0次方是1,-1的0次方也是1,0的0次方没有意义(数学相关)
任意进制到十进制之间的转换 2 8 16进制如何转10进制
前提: 十进制数:157
系数: 每一位上的数字(157 个位上的系数是7 十位上的系数是5 百位上的系数是1)
基数: 几进制基数就是几 (十进制基数就是10 二进制基数就是2)
权: 一个数从右往左数 从0开始 对每一位上的数进行编号 那么这个编号就是这个位置上的数字的权
157
210 权
规律: 任意进制到十进制的转换都等于: 这个数的各个位上的系数乘以基数的权次幂相加的和
十进制:157= (7*10^0) (5*10^1) (1*10^2)=7 50 100
二进制:0b110=(0*2^0) (1*2^1) (1*2^2) =0 2 4=6
八进制:0110=(0*8^0) (1*8^1) (1*8^2) =0 8 64=72
十六进制:0xABC=(C*16^0) (B*16^1) (A*16^2)=12 176 2560=2748
----------------a=10 b=11 c=12 d=13 e=14 f=15--------------------
//验证:
int n=0b110;
System.out.println(n);//6
int n2=0110;
System.out.println(n2);//72
int n2=0xABC;
System.out.println(n2);//2748
2.6.2十进制到任意进制的转换
规则:除以基数取余数,直到商为0,余数反转
十进制到任意进制之间的转换 十进制转换到2 8 16进制
规则: 除以基数取余数 直到商为0 余数反转
十进制:10
"转二进制"
2|10 0
----
2|5 1
----
2|2 0
---
2|1 1
----
0
结果:二进制的 0b1010
反推 0*2^0 1*2^1 0*2^2 1*2^3=0 2 8=10
"转八进制":
8|10 2
----
8|1 1
---
0
结果:八进制 012
反推: 2*8^0 1*8^1=2 8=10
"转16进制"
16|200 8
----
16|12 c=12
----
0
结果: 16进制 0xc8
反推 8*16^0 c*16^1=8 192=200
//验证
int a=0b1010;//二进制
System.out.println(a)//十进制显示
int a2=012;
System.out.println(a2)//十进制显示
int a3=0xc8;
System.out.println(a3)//十进制显示
2.6.3快速进制转换法:8421码
概念:8421码十进制和二进制的快速转换
8421码是中国大陆的叫法 它是BCD码中最常用的一种 这种编码方式中每一位二进制代码的1都是代表一个固定的数值然后把每一位1代表的数的十进制数加起来 得到的结果就是它所代表的十进制数码
BCD码:又叫二进制十进制数(二.十进制代码)
1 8421码规则
二进制 1 1 1 1 1 1 1 1
十进制 128 64 32 16 8 4 2 1
算的方式:
二进制数:11011
如果用公式转十进制数: 1*2^0 1*2^1 0*2^2 1*2^3 1*2^4 = 1 2 0 8 16=27
如果用BCD码转成十进制数: 1 2 0 8 16=27
十进制数:100
转二进制看是哪些数字相加 并且这些数都是2的倍数
100=64 32 4
二进制 1 1 1 1 1 1 1 1
十进制 128 64 32 16 8 4 2 1
64:第七位
32:第六位
4: 第三位
其余位补0
二进制表示 1 1 0 0 1 0 0
2 利用8421码如何快速的二进制转八进制
二进制到八进制3位组合
3 利用8421码如何快速的二进制转十六进制
二进制到十六进制4位组合
案例:
八进制: 10 101 010
21 421 421
2 5 2 (拼接 不是求和) 252
十进制: 1 0 1 0 1 0 1 0
128 64 32 16 8 4 2 1(求和) 128 32 8 2=170
十六进制:1010 1010
8421 8421
10 10
a a (拼接 不是求和)aa
常见的进制对照表: