与 或 亦或 取反 右移 无符号右移

Posted ChaseForFuture

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与 或 亦或 取反 右移 无符号右移相关的知识,希望对你有一定的参考价值。

// 提取低位的半个字节
  System.out.println("01010101 & 0x00ff 结果为"+(0x55 & 0x0f));
  // 按位或
  // 在socket通信DataInputStream.readUnsignedShort()中用来合并byte
  System.out.println("00001111 | 11110000 结果为:"+(15 | 15 << 4));
  // 按位亦或
  System.out.println("01011100 ^ 11111010 结果为:"+(0x5c ^ 0xfa));// 10100110 oxa6

  System.out.println(Integer.toBinaryString(0xaf));
  int a = ((int)0x8a)|((int)0x05);
  System.out.println(Integer.toBinaryString(a)+"\na:"+(-1|a));
  
  System.out.println(Integer.toBinaryString((int)((0x87 - 0x01) ^ 0xff))+"十进制:-"
    + ""+(int)((0x87 - 0x01) ^ 0xff));
  System.out.println(Integer.toBinaryString(1));
  
  // 数值取反
  System.out.println(Integer.toBinaryString(~(9 - 0x00000001 )));
  System.out.println(Integer.toBinaryString(-9));
  
  // 所有整数在内存中均用补码表示
  // 0x8f = 1000 1111 ; 1000中 1为符号位,表示负数 ;
  // 1000 1111 (补码) ---> 1000 1110 (反码) ----> 1111 0001 (原码)
  // 所以 0x8f 表示  -(7*16 + 1) = -113
  System.out.println((byte)0x8f);
  
  short s = (short) 0x80ff;
  // 0x80ff -->  10000000 11111111 (补码,符号位1,表示负数) ---> 10000000 11111110 (反码)
  // ---> 11111111 00000001 (原码) = -(7*16^3 + 15*16^2 +1) = 28672 + 3840 + 1
  System.out.println("0x80ff :\t"+s);
  
  
  // 输出 0xc5 = 1100 0101 符号位为1; 补码11000101-->反码11000100-->原码10111011= -(3*16+11) = -59
  System.out.println("0xc5 :\t"+(byte)0xc5);
  //  符号右移 高位补0,最高位为0
  System.out.println("0xc5>>1:\t"+(byte)(0xc5>>1));
  // 无符号右移 高位补1,最高位为0
  System.out.println(Integer.toBinaryString((((byte)0xc5)>>>1)).length());
  System.out.println((byte)0xc5>>>1);
  //System.out.println(Float.MIN_VALUE);

以上是关于与 或 亦或 取反 右移 无符号右移的主要内容,如果未能解决你的问题,请参考以下文章

Java位运算:位异或运算位与运算位或运算位取反运算左位移运算右位移运算无符号右移运算不用额外变量交换两个整数的值(使用位异或运算)

Java位运算:位异或运算位与运算位或运算位取反运算左位移运算右位移运算无符号右移运算不用额外变量交换两个整数的值(使用位异或运算)只出现一次的数字

Java位运算:位异或运算位与运算位或运算位取反运算左位移运算右位移运算无符号右移运算不用额外变量交换两个整数的值(使用位异或运算)只出现一次的数字

C语言位运算符:与或异或取反左移与右移详细介绍

PHP无符号右移与旋转右移

C语言位运算符:与或异或取反左移与右移详细介绍