1、将所给数转化为二进制
public class weiyunsuan {
public static void main(String[] args) {
//获取最大的正数
zhuanhua(Integer.MAX_VALUE);
}
public static void zhuanhua(int a){
//从能移动的最高位开始递减,相与后得出的结果就是从数据的最高位递减,这样便于将数据的二进制直接输出
//1可以不左移,相与得到的结果就是数据a的最后一位的元素,即i == 0;
for(int i = 31;i >= 0;i--){
//通过将1不断左移,与传入的数据相与得出数据每个位置上的元素是0还是1
System.out.print((a & (1 << i)) == 0 ? "0" : "1");
}
System.out.println();
}
}
2、>>与>>>的区别
①相同点:
对于正数来说,二者没有区别,都是向右移动某些位,符号位用0填补。
②不同点:
对于负数而言:
>>表示“带符号右移”,即向右移动后,符号位用1填补
>>>表示“不带符号右移”,即向右移动后,符号位用0填补
3、正数与负数的相互转化
int a = Integer.MAX_VALUE;
int b = -a;
int c = (~a + 1);
zhuanhua(a);
zhuanhua(b);
zhuanhua(c);
//由结果知:b与c的结果一致
令a为正数(负数),b、c均为a的相反数
b = -a;
c = (~a + 1);
结果是:b == c
4、最小负数的相反数还是它本身
int a = Integer.MIN_VALUE;
int b = -a;
int c = (~a + 1);
zhuanhua(a);
zhuanhua(b);
zhuanhua(c);
①最小的负数的相反数还是它本身的原因:最小的负数整体取反加一之后还是它本身
②任何一个正数都有它对应的相反数,但是负数只有除了最小的数外才有一一对应的相反数,
原因在于二进制的范围是:(正数比负数少一个)
5、0的相反数还是0
0取反加一后,溢出了一位,溢出的当不存在,得出的结果还是0