62,614
社区成员
发帖
与我相关
我的任务
分享
public class TestAndandOr2 {
public static void main(String[] args) {
// 目标
// 120 -120
// 0111 1000 1000 1000
byte positive = 120;
byte negative = -120;
// 掩码
// 0x00 0xff
// 0000 0000 1111 1111
int bytemask0 = 0x00;
int bytemask255 = 0xff;
System.out.print("positive:" + positive);
System.out.print(",negative:" + negative);
System.out.print(",bytemask0:" + bytemask0);
System.out.println(",bytemask255:" + bytemask255);
// positive:120,negative:-120,bytemask0:0,bytemask255:255
System.out.println();
// 测试对象:
// -120 & 0xff
// -120 1000 1000
// & 255 1111 1111
// !! 136 1000 1000
System.out.println(negative & bytemask255);
// 测试起因:原先在书上看到竟然有这样的方法把补码表示的负数转化为该字节相对应的正数(不计符号位)
System.out.println("-------------------------------");
// 测试方向:按位运算符的影响
// 其他测试示例
// 120 & 0xff -> 120 (正常,无特殊情况)
System.out.println(1);
System.out.println(positive & bytemask255);
// -120 | 0x00 -> -120 (正常,无特殊情况)
System.out.println(2);
System.out.println(negative | bytemask0);
// 120 | 0x00 -> 120 (正常,无特殊情况)
System.out.println(3);
System.out.println(positive | bytemask0);
System.out.println("-------------------------------");
// 测试方向:数据类型
// 原来结果 转化后结果
//!!! 136 -120
System.out.println(negative & (byte)bytemask255);
// 120 120
System.out.println(positive & (byte)bytemask255);
// -120 -120
System.out.println(negative | (byte)bytemask0);
// 120 120
System.out.println(positive | (byte)bytemask0);
// 疑问:难道是int的掩码转化的结果?继续测试
System.out.println("-------------------------------");
// 测试方向:回应上个测试的疑问,强转所有位数
// -120 | 0xff -> -1
System.out.println(negative | bytemask255);
// 120 | 0xff -> 255
System.out.println(positive | bytemask255);
// 疑问:-1并无变成255?
System.out.println("-------------------------------");
// 回到第一个问题: -120 & (int)0xff 为何是 136
// -120 & 0xff
// -120 1000 1000
// & 255 1111 1111
// !! 136 1000 1000
}
}