- 进制
binary: 1 -> 10 -> 11 -> 100 每次从后面进一位
octal: 7-> 10 八进制是0-7之间,底数为8的计算
hexadecimal:A....F
- 转换
十进制转换成其他进制:转化成几进制就除以几
比如, 十进制的12,转化成二进制就除以2,然后将余数反着写即可
12
6-----------0
3-----------0
1-----------1
0-----------1 //1除以2得0余1
二进制转化成其他进制用乘法
- 原码、反码、补码
原码:数的二进制表示,正数以0开头,负数以1开头
反码:原码的符号位不变,其他位取反
补码:在反码的基础上加1
正数的原码、反码和补码相同
比如:
12
0000 0000 0000 0000 0000 0000 0000 1100
第一位是0, 所有表示一个正数
-12
0000 0000 0000 0000 0000 0000 0000 1100 取反如下,
1111 1111 1111 1111 1111 1111 1111 0011 反码, 开头1表示负数
1111 1111 1111 1111 1111 1111 1111 0100 在反码的基础上+1就是补码了
- 位运算(&, | , ^ , ~)
参与运算的都是整形数据,将数据转成二进制再按位运算
&: 只有两个位上都是1结果才是1
| : 只要两个位上有一个是1 ,结果就是1
^: 异或运算,相同为0,不同为1
~: 位非,按位取反,每一位取反
如:
0000 0000 0000 0000 0000 0000 0000 1100 的~运算后
1111 1111 1111 1111 1111 1111 1111 0011
package project4;
public class test6 {
public static void main(String[] args) {
System.out.println(12&13);
System.out.println(12|13);
System.out.println(12^13);
System.out.println(~12); //取反
}
}
输出结果:
12
13
1
-13
灵活掌握 原码,反码,补码之间的关系和运算,比如,知道补码怎么求原码?补码减去1再取反就是原码了
- 位运算(<<,>>,>>>)
参与运算的数都是整数数据,将数据转成二进制再移位运算
<< :向左运算,在低位补0
>> : 有符号右移,若值为正,则在高位插入0, 若值为负,则在高位插入1
>>> : 无符号右移,无论正负,都在高位插入0
若对char、byte、short进行移位处理,在移位之前,他们会自动转换成一个int
package project4;
public class test6 {
public static void main(String[] args) {
System.out.println(12<<2);
/* 0000 0000 0000 0000 0000 0000 0000 1100 :12
00 0000 0000 0000 0000 0000 0000 110000 <<
12左移两位就是去掉12最左边的两位,然后在最后面补0*/
System.out.println(12>>2);
/* 0000 0000 0000 0000 0000 0000 0000 1100 :12
00 0000 0000 0000 0000 0000 0000 0000 11 >>
12右移就是去掉最右边两位,然后在最左边补两个0*/
System.out.println(-12>>>2);
/*00 1111 1111 1111 1111 1111 1111 1111 01 -12>>>2*/
System.out.println(Integer.toBinaryString(1073741821)); //把整型转成二进制
}
}
- 运算符的优先级
推荐使用小括号限定执行的优先级