java位运算

进制

二进制    逢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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值