进制
- 二进制:0,1 ,满2进1.前缀:0b/0B)(后缀:b/B)。
- 八进制:0-7 ,满8进1. 以数字0开头表示。(前缀:0)(后缀:o/O)
- 十进制:0-9 ,满10进1。(前缀:无,可加+/-)(后缀d/D)
- 十六进制:0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。
(前缀:0x/0X)(后缀:h/H)
如:0x21AF +1= 0X21B0
二进制转换成十进制示例
规则:从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
0b1011=1* 20+121+022+1*23=1+2+0+8=111
十进制转换成二进制
八进制转换成十进制示例
规则:从最低位开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。
0123 = 3 * 8 ^ 0 + 2 * 8 ^ 1 + 1 * 8 ^ 2 = 3 + 16 + 64 = 83
十进制转换成八进制
十六进制转换成十进制示例
规则:从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
0x34A = 10 * 16 ^ 0 + 4 * 16 ^ 1 + 3 * 16 ^ 2 = 842
十进制转换成十六进制
二进制转换成八进制
八进制转换成二进制
二进制转换成十六进制
十六进制转换成二进制
二进制在运算中的说明
- 现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是“逢2进1”,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。
原码 、反码 、补码
原码:
是计算机机器数中最简单的一种形式,数值位就是真值的绝对值,符号位位“0”时表示正数,符号位为“1”时表示负数,原码又称带符号的绝对值。
反码:
通常是用来由原码求补码或者由补码求原码的过渡码。
补码:
是计算机把减法运算转化为加法运算的关键编码,在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理 。
- 二进制的最高位是符号位: 0表示正数,1表示负数
- 正数的原码,反码,补码都一样 (三码合一)
- 负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
- 负数的补码=它的反码+1 //=> 它的反码 = 补码 - 1
- 0的反码,补码都是0
- java没有无符号数,换言之,java中的数都是有符号的
- 在计算机运算的时候,都是以补码的方式来运算的.
- 当我们看这个结果的时候,要看他的原码
额外知识:
- 按位与 &:两位全为1,结果为1,否则为0
- 按位或 | : 两位有一个为1,结果为1,否则为0
- 按位异或 ^ : 两位一个为0,一个为1,结果为1,否则为0
- 按位取反~ : 0->1 ,1->0
2 & 3
0000 0010
0000 0011
& 0000 0010 =》 2
-2 的取反
按位~ -2 : 0->1 ,1->0
-2 的原码 1000 0010 => 反码 1111 1101 => 补码 1111 1110 => 取反 0000 0001
2 的取反
按位~ 2 : 0->1 ,1->0
2 的原码 0000 0010 => 反码 0000 0010 => 补码 0000 0010 => 取反 1111 1101
1111 1101(补码) => 1111 1100 (反码) => 1000 0011 => -3
1)>>、<< 算术右移和算术左移,运算规则:
算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
算术左移 <<: 符号位不变,低位补0
2)>>> 逻辑右移也叫无符号右移,运算规则是: 低位溢出,高位补 0
特别说明:没有 <<< 符号
int a=1>>2; // 0000 0001 => 0000 0000 , 本质 1 / 2 / 2 = 0
int c=1<<2; // 0000 0001 => 0000 0100 , 本质 1 * 2 * 2 = 4