码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-11-23 15:23:58      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:data   通信   内存   read   value   int   --   amp   bin   

// 提取低位的半个字节
  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);

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

标签:data   通信   内存   read   value   int   --   amp   bin   

原文地址:http://www.cnblogs.com/zhengwenqiang/p/7884270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!