位运算学习笔记

来源:互联网 发布:精灵4批量提取pos数据 编辑:程序博客网 时间:2024/05/08 06:29

 位运算学习笔记:  
   
  JAVA中位运算符包括,  
  <<  
  >>  
  >>>  
  &  
  |  
  ~  
  ^  
   
  首先要搞清楚参与运算的数的位数,如int的是32位。long的是64位。  
  如int   i   =   1;  
  i的二进制原码表示为:  
  00000000000000000000000000000001  
   
  long   l   =   1;  
  l的二进制原码表示为:  
  0000000000000000000000000000000000000000000000000000000000000001  
   
  二、  
  正数没有反码、补码,也可以说正数的反码、补码跟原码一样。  
  负数的反码为原码逐位取反,  
  如int   i   =   -1;  
  10000000000000000000000000000001,最高位是符号位。正数为0,负数为1。  
  逐位取反后:  
  01111111111111111111111111111110即反码。  
  反码加1:  
  01111111111111111111111111111111即补码。  
  负数都是用补码参与运算的。得到的也是补码,需要减1取反获得原码。  
   
  三、常用的位运算符--0在位运算中是比较特殊的。  
  ^     异或。             相同为0,相异为1;       任何数与0异或都等于原值。   
  &     与。                 全1为1,   有0为0;  任何数与0异或都等于0。    
  |     或。                 有1为1,   全0为0。  任何数与0或都等于原值。  
  <<   左移。             补0。  
  >>   右移。             符号位是0补0,是1补1。  
  >>>无符号右移。补0。  
  ~     非                     逐位取反  
   
  四、负数参与的运算,得到的是补码,需要将补码先减1,然后逐位取反,得到原码。即为运算结果。  
  0例外,如果得到的是0,则不需减1和取反。  
  另外,两个正数运算后得到的就是原码,不需减1和取反。  
   
   
  举例:  
  1^-1,  
  -1  
  10000000000000000000000000000001--原码  
  01111111111111111111111111111110--反码  
  01111111111111111111111111111111--补码  
  1  
  00000000000000000000000000000001--原码  
   
  则1^-1等于  
  01111111111111111111111111111111^  
  00000000000000000000000000000001=  
  01111111111111111111111111111110--补码  
  01111111111111111111111111111101--反码  
  10000000000000000000000000000010--原码==-2  
  即1^-1=-2  
   
  举例:  
  1^-2  
  -2  
  10000000000000000000000000000010--原码  
  01111111111111111111111111111101--反码  
  01111111111111111111111111111110--补码  
  1  
  00000000000000000000000000000001--原码  
  则1^-2等于  
  01111111111111111111111111111110^  
  00000000000000000000000000000001=  
  01111111111111111111111111111111--补码  
  01111111111111111111111111111110--反码  
  10000000000000000000000000000001--原码==-1  

原创粉丝点击