进制
二进制 逢2进1 例:84的二进制 1.除二取一法(8421) 1010100
2. 1*2^6+0*2^5+1*2^4+0*2^3+1*2^2+0*2^1+0*2^0=84(二进制转十进制)
八进制 逢8进1(0~7) 二进制转8进制规律,每3位转换成1位8进制 例:184的二进制为10111000的八进制可写为010-111-000(前面不够补零 用8421法) 所以184的八进制为:270
十进制 逢10进1(0~9) 例 234=2*10^2+3*10^1+4*10^0
十六进制 逢16进1 二进制转16进制规律,每4位转换成1位16进制 (A-F)分别表示10-15 例如 1011-1101的16进制为BD
位运算
& 与运算 两个都是1才为1 int a=12; 12=0000-0000 0000-0000 0000-0000 0000-1100
int b=4; 4=0000-0000 0000-0000 0000-0000 0000-0100 --------0100=4
int c=a&b; 输出:4
| 或运算 只要有一个是1就是1 int a=10; 10=0000-0000 0000-0000 0000-0000 0000-1010
int b=6; 6=0000-0000 0000-0000 0000-0000 0000-0110------1110=14
int c=a|b; 输出:14
^ 异或 一个数和另一个数异或两次还是他自己, 一个数和自身异或结果是0 , 一个数和0异或结果还是他本身(应用于对称密码中)
例如int a=10;
int b=6; //a^b^b=a;
a=a^b; = //a=a^b=10^6;
b=a^b; // b=a^b=10^6^6=10;
a=a^b; // a=a^b=10^6^10=6;
System.out.println(a);
System.out.println(b); 输出:6,10
~ 按位取反 0为1,1为0
>> 右移 m>>2 右移动多少位就是除以2的多少次方 右移的时候,余数一定是正数 正数右移,最高位补0 负数右移,最高位补1,最小是-1
例如int a=10;
int c=a>>3;(右移3位) =// 10/2^3=10/8=1
System.out.println(c); 输出:1
负数右移,最高位补1,最小是-1 int a=-5; // -10/2^1=-5
int c=a>>10; (运算负数位移的时候,余数一定是正数)例: -10/8=-2...6=-2*8=6=-10
System.out.println(c); 输出; -1
- 5=1111-1111 1111-1111 1111-1111 1111-1011 右移10位 截断10位 前面补1(负数的二进制等于正数的二进制取反+1)
-5=111111-1111 1111-1111 1111-1111 1111-11=-1
<< 左移 m<<2 左面移动多少位,就是多少次方 左移后面补充0 例如 int a=10;
int c=a<<1; //10*2^1
System.out.println(c); 输出: 20
10=0000-0000 0000-0000 0000-0000 0000-1010 左移一位 10=000-0000 0000-0000 0000-0000 0000-10100=20
>>> 无符号右移动 最高位都补充0