注:本内容参考与传智播客的Java内容的讲解,当然我整理了一下,做个记录~~~ 其中我认为很有价值的是有符号数据表示法,真正的去深入了解计算机,虽然我是一个渣渣~~~
所谓进制就是指:就是位进制,是人们规定的一种进位方法。对于任何一种进制 --X进制,就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制就是逢八进一,十进制就是逢十进一,十六进制就是逢十六进一。
一、常见的进制转换
1、在Java中针对整数常量提供了四种表现形式
(1)二进制 由0,1组成。以0b开头。
(2)八进制 由0,1,...7组成。以0开头。
(3)十进制 由0,1,...9组成。整数默认是十进制。
(4)十六进制 由0,1,...9,a,b,c,d,e,f(大小写均可)组成。以0x开头。
2、进制转换
(1)其他进制到十进制(系数*基数^权)
系数:就是每一个位上的数值
基数:x进制的基数就是x
权:对每一个位上的数据,从右,并且从0开始编号,对应的编号就是该数据的权。
例子:
0b10101 (这个数是二进制的一个数,因为是以0b开头的)
=1*2^4 + 1*2^2 + 1*2^0
=16 + 4 + 1
=21
0123(这个数是八进制的一个数,因为是以0开头的)
=1*8^2 + 2*8^1 + 3*8^0
=64 + 16 + 3
=83
0x3c(这个数是十六进制的一个数,因为是以0x开头的)
=3*16^1 + c*16^0
=48 + 12
=60
(2)十进制到其他进制的转换
除基取余,直到商为0,余数反转。
例子:
52分别得到二进制,十进制,十六进制
得到二进制:
52 / 2 = 260
26 / 2 = 130
13 / 2 = 6 1
6 / 2 = 3 0
3 / 2 = 1 1
1 / 2 = 0 1
0b110100
得到八进制:
52 / 8 = 64
6 / 8 = 0 6
064
得到十六进制:
52 / 16 = 3 4
3 / 16 = 0 3
0x34
3、进制转换的快速转换法
(1)十进制和二进制间的转换
8421码。
(2)二进制到八进制,十六进制的转换
二、有符号数据表示法
在计算机内,有符号数据有三种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。
原码:就是二进制定点表示法。即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码:正数的反码与其原码相同,负数的反码是对其原码逐位取反,符号位除外。
补码:正数的补码与其原码相同,负数的补码是在其反码的末位加1。
例子:
1)已知某数X的原码为10110100B,试求X的补码和反码。
符号位数值位
原码:10110100
反码:11001011
补码:11001100
2)已知某数X的补码11101110B,试求其原码。
符号位数值位
补码:11101110
反码:11101101
原码:10010010