Java_位操作
2012-05-04 12:08
141 查看
1. 正数及负数的按位与,按位或和异或操作:
public class Temp { public static void main (String args[]) { int x = 3; //3的二进制为00000000 00000000 00000000 00000011 int y = 6; //6的二进制为00000000 00000000 00000000 00000110 System.out.println(x & y); //输出2 System.out.println(x | y); //输出7 System.out.println(x ^ y); //位相同为0,不同为1.输出5 x = -3; //-3的二进制为10000000 00000000 00000000 00000011, 反码为11111111 11111111 11111111 11111100, 补码为11111111 11111111 11111111 11111101 y = -6; //-6的二进制为10000000 00000000 00000000 00000110, 反码为11111111 11111111 11111111 11111001, 补码为11111111 11111111 11111111 11111010 System.out.println(x & y); //补码与之后为11111111 11111111 11111111 11111000, 反码(补码减1)为11111111 11111111 11111111 11110111, 原码(反码取反,如果第一位为1,则表明是负数,负数符号位不取反)为10000000 00000000 00000000 00001000.因此输出-8 System.out.println(x | y); //输出-1 System.out.println(x ^ y); //输出7(注意:符号位也进行运算。由于前面29为预算后都为0,所以结果变成正数) } }
2. 正数及负数的取反操作:
public class Temp { public static void main (String args[]) { int x = 3; //3的二进制为00000000 00000000 00000000 00000011 int y = -3; //-3的二进制为10000000 00000000 00000000 00000011 System.out.println(~x); //正数直接按原码取反为11111111 11111111 11111111 11111100,但这是一个负数的补码,因此该负数的反码为11111111 11111111 11111111 11111011,原码为10000000 00000000 00000000 00000100,输出-4 System.out.println(~y); //补码为11111111 11111111 11111111 11111101,取反为00000000 00000000 00000000 00000010,输出2 } }
3. 正数及负数的左移位操作:右边补0
public class Temp { public static void main (String args[]) { int x = 3; //3的二进制为00000000 00000000 00000000 00000011 int y = -3; //-3的二进制为10000000 00000000 00000000 00000011 System.out.println(x<<2); //左移位后为00000000 00000000 00000000 00001100,输出12 System.out.println(y<<2); //补码为11111111 11111111 11111111 11111101,左移位后为11111111 11111111 11111111 11110100,这是一个负数的补码,还要转成原码为10000000 00000000 00000000 00001100,输出-12 } }
4. 正数及负数的右移位操作:左边补跟符号位一样的数字
public class Temp { public static void main (String args[]) { int x = 3; //3的二进制为00000000 00000000 00000000 00000011 int y = -3; //-3的二进制为10000000 00000000 00000000 00000011 System.out.println(x>>2); //右移位后为00000000 00000000 00000000 00000000,输出0 System.out.println(y>>2); //补码为11111111 11111111 11111111 11111101,右移位后为11111111 11111111 11111111 11111111,这是一个负数的补码,还要转成原码为10000000 00000000 00000000 00000001,输出-1 } }
5. 正数及负数的无符号右移位操作:左边都补0
public class Temp { public static void main (String args[]) { int x = 3; //3的二进制为00000000 00000000 00000000 00000011 int y = -3; //-3的二进制为10000000 00000000 00000000 00000011 System.out.println(x>>>2); //右移位后为00000000 00000000 00000000 00000000,输出0 System.out.println(y>>>2); //补码为11111111 11111111 11111111 11111101,右移位后为00111111 11111111 11111111 11111111,输出1073741823 } }
相关文章推荐
- Java人也不能忘记的~~位操作技巧
- java的位操作
- Java笔试题分类总结--位操作
- 黑马程序员_java基础——位运算与位操作
- 关于java按位操作运算
- java位操作
- java 位操作 bitwise(按位) operation bit
- Java中的位操作,位判断
- java 位操作的总结
- Java位操作全面总结[ZZ]
- 可能是最通俗易懂的 Java 位操作运算讲解
- java位操作
- java位操作全面总结
- 关于java按位操作运算
- 一道面试题与Java位操作 和 BitSet 库的使用
- 总结一下java中的位操作,运算优先级
- Java中的按位操作——Java编程思想笔记
- (java基础)位操作
- Java中的位操作
- java的位操作