进制分类
对于整数,有四种表示方式
二进制:0,1 ,满2进1.以0b或0B开头。 0b11
十进制:0-9 ,满10进1.
八进制:0-7 ,满8进1. 以数字0开头表示。 010
十六进制:0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。
进制计算
次方是从右往左数,索引是从0开始的
例:
283175
十进制:以10为底计算权值,逢十进一
计算过程:
2 * 10 ^ 5 + 8 * 10 ^ 4 +3 * 10 ^ 3 +1 * 10 ^ 2 +7 * 10 ^ 1 +5 * 10 ^ 0
十六进制:以16为底计算权值,逢16进一
例:
0x35
3 * 16 ^ 1 + 5 * 16 ^ 0= 48 + 5(十六进制) = 53(十进制)
二进制: 以2为底计算权值,逢2进一
例: 0110 1101
0 * 2 ^ 7
1 * 2 ^ 6+1 * 2 ^ 5+ 0 * 2 ^ 4+ 1 * 2 ^ 3+1 * 2 ^ 2+0 * 2 ^ 1+1 * 2 ^ 0 = 64 + 32 + 8 + 4 + 1 = 109
计算机内存地址为什么用16进制?
-
计算机硬件是0101二进制的,16进制刚好是2的倍数,更容易表达一个命令或者数据。十六进制更简短,因为换算的时候一位16进制数可以顶4位2进制数,也就是一个字节(8位进制可以用两个16进制表示)
-
最早规定ASCII字符集采用的就是8bit(后期扩展了,但是基础单位还是8bit),8bit用2个16进制直接就能表达出来,不管阅读还是存储都比其他进制要方便
-
计算机中CPU运算也是遵照ASCII字符集,以16、32、64的这样的方式在发展,因此数据交换的时候16进制也显得更好
-
为了统一规范,CPU、内存、硬盘我们看到都是采用的16进制计算
16进制用在哪里?
-
网络编程,数据交换的时候需要对字节进行解析都是一个byte一个byte的处理,1个byte可以用0xFF两个16进制来表达。通过网络抓包,可以看到数据是通过16进制传输的。
-
数据存储,存储到硬件中是0101的方式,存储到系统中的表达方式都是byte方式
-
一些常用值的定义,比如:我们经常用到的html中color表达,就是用的16进制方式,4个16进制位可以表达好几百万的颜色信息。
进制转换
二进制–> 十六进制:四位一体
二进制–>十六进制:三位一体
二进制–>十进制:乘以2的幂数
十进制–>二进制:除以2取余数:余数短除法 – 除以二
原码、补码
概念
- 所有数字在计算机底层都以二进制形式存在。
- 计算机以补码的形式保存所有的整数。
(1)正数的原码、补码都相同
(2)负数的补码是其正数取反加1。 - 原码:直接将一个数值换成二进制数。
- Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;
当是long类型时,二进制默认占64位,第64位是符号位