1.java整数类型总结
数据类型 | 范围(^ 代表次方) | 字节数 |
byte 类型 | -128(-2 ^ 7) ~ 127(2 ^ 7 - 1) | 1字节,8位 |
short 类型 | -32768(-2 ^ 15)~ 32767(2 ^ 15 - 1) | 2字节,16位 |
int 类型 | -2,147,483,648(-2 ^ 31)~ 2,147,483,647(2 ^ 31 - 1) | 4字节,32位 |
long 类型 | -2 ^ 63 ~ 2 ^ 63 -1 (数值太长没必要记了...) 8字节,64位 |
2.二进制转换
转换方式 | 语言 | 函数 | 结果 |
十进制转二进制 | Java | Integer.toBinaryString(100) | 1100100 |
二进制转十进制 | Java | Integer.valueOf("1100100",2) | 100 |
注意:Java中的二进制是存在符号位的。我们以-10举例:
Integer.toBinaryString(-10) -> "11111111111111111111111111110110"
负数转换成二进制分为3步:
1、首先将负数转换为对应的原码
-3的原码为(也就是+3转换成二进制后的字符串):
0000 0000 0000 0000 0000 0000 0000 0011
2、再将原码的每一位做取反操作得到反码。 取反操作:0变为1 1变为0; 取反后的结果即为:1111 1111 1111 1111 1111 1111 1111 1100
3、将反码+1得到补码1111 1111 1111 1111 1111 1111 1111 1101
3.位运算(& | ^)
与 ( & ) | 0 & 0 = 0 | 1 & 0 = 0 | 0 & 1 = 0 | 1 & 1 = 1 |
---|---|---|---|---|
或( | ) | 0 | 0 = 0 | 1 | 0 = 1 | 0 | 1 = 1 | 1 | 1 = 1 |
异或( ^ ) | 0 ^ 0 = 0 | 1 ^ 0 = 1 | 0 ^ 1 = 1 | 1 ^ 1 = 0 |
与、或 操作符合日常逻辑,异或操作大家只要记住,相同为0 ,不同为1即可。
PS: Java 在遇到与或是经常会顺带问问短路与 ( && ) 短路或( || )的区别,即遇到前半部分符合条件立即终止判断。
4.位移操作
位运算分 左位移、右位移,符号对应<< 和 >>,简单来说就是将数字 m 向左、右移动n位。
如果是左移,最左边的n位将被丢弃,同时使用n个0进行补充至字符串末尾。
如果是右移,字符串末尾的n位被丢弃,但处理左边位时默认补0?No,针对Java等有符号位的语言,需要补充符号位,即正数补0,负数补1!
5.知识点
知识点一:x/2 等价于 x>>1
知识点二:x%2 等价于 x&1