进制
1)进制是一种计数方式,它定义了我们如何表示和计算数字
2)当数位上的值达到最大值时,该位就“满位”,需要向高位进1
2)生活中常用的计数方式是十进制(满9进1)
进制
进制 | 进制数 | 计数方式 |
二进制 | 0,1,10,11,100,101,110,111 | 满2进1 |
三进制 | 0,1,2,10,11,12,20,21,22,100 | 满3进1 |
四进制 | 0,1,2,3,10,11,12,13,20,21 | 满4进1 |
五进制 | 0,1,2,3,4,10,11,12,13,14,20 | 满5进1 |
六进制 | 0,1,2,3,4,5,10,11,12,13,14,15,20 | 满6进1 |
七进制 | 0,1,2,3,4,5,6,10,11,12 | 满7进1 |
八进制 | 0,1,2,3,4,5,6,7,10,11,12 | 满8进1 |
九进制 | 0,1,2,3,4,5,6,7,8,10,11,12 | 满9进1 |
十进制 | 0,1,2,3,4,5,6,7,8,9,10,11,12 | 满10进1 |
十一进制 | 0,1,2,3,4,5,6,7,8,9,A,10,11,12 | 满11进1 |
十二进制 | 0,1,2,3,4,5,6,7,8,9,A,B,10,11,12 | 满12进1 |
...... | ...... ...... | ...... |
十六进制 | 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,12 | 满16进1 |
...... | ...... ...... | ...... |
对于整数,一般有四种表示方式:
进制 | 英文 | 数值 | 计数方式 | 表示方式 |
二进制 | binary | 0,1 | 满2进1 | 以0b或0B开头 |
八进制 | octal | 0,1,2,3,4,5,6,7 | 满8进1 | 以数字0开头 |
十进制 | decimal | 0,1,2,3,4,5,6,7,8,9 | 满10进1 | |
十六进制 | hex | 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F | 满16进1 | 以0x或0X开头 |
说明
整形常量中最高位是符号位,0表示正数,1表示负数
示例
1)二进制数 0111 1111 = 十进制数 127
2)二进制数 1000 0000 = 十进制数 -128
二进制的整数的三种形式:
原码:直接将一个数值转换成二进制数。最高位是符号位
负数的反码:对原码按位取反,最高位(符号位)定为1
负数的补码:反码加1。
正数的原码、反码、补码都相同
示例(1)正数
原码14: 0000 1110
反码14: 0000 1110
补码14: 0000 1110
示例(2)负数
原码-14:1000 1110
反码-14:1111 0001
补码-14:1111 0010
说明
计算机中以二进制补码的形式保存所有的整数
进制的转换:
十进制 >> 二进制:除2取余的逆
例如:整数(13)
13除2 = 6余 1,
6除2 = 3余 0,
3除2 = 1余 1,
1余2 = 0余 1,
所以十进制数13等于二进制数1101
二进制 >> 十进制:个位乘以2的0次方,十位乘以2的1次方,百位乘以2的2次方,以此类推
例如:二进制 0000 1110 1001
十进制 2⁷+2⁶+2⁵+2³+2⁰ = 128+64+32+8+1 = 233
二进制 >> 八进制: 111 = 7 个位乘以2的0次方,十位乘以2的1次方,百位乘以2的2次方
例如:二进制0000 1110 1001
八进制0351
二进制>>十六进制:1111 = F
例如:二进制0000 1110 1001
十六进制0XE9
负数的计算:
正数的补码就是它自己
负数的补码是它的相反数全部取反再加1
示例
0011 0110 这是一个byte型整数. 是多少?
0x36 => 54
所以0011 0110是+54这个数据的真实存储.
示例
1100 1010 这是一个byte型整数, 是多少?
是一个负数, 负多少???? 需要减一再找到相反数
1)减一 => 1100 1001
2)取反 => 0011 0110 => 0x36 => 54
3)所以1100 1010是 -54
示例(1)
1111 1111 是负数
1)减一 => 1111 1110
2)取反 => 0000 0001 => 1
3)所以 1111 1111是 -1
示例(2)
1000 0000 是负数
1)减一 => 0111 1111
2)取反 => 1000 0000 => 0x80 => 128
3)所以1000 0000是 -128
说明
byte型最大值
0111 1111 => 0x7F => 16*7+15 = 127
short型最大值
0111 1111 1111 1111 => 0x7FFF
short型最小值
1000 0000 0000 0000 => 0x8000
int型最大
0111 1111 1111 1111 1111 1111 1111 1111 => 0x7FFFFFFF
int型最小
1000 0000 0000 0000 0000 0000 0000 0000 => 0x80000000
long型最大
0x7FFFFFFF_FFFFFFFF
long型最小
0x80000000_00000000