在java中Interger类型表示的最大数是
System.out.println(Integer.MAX_VALUE);//打印最大整数:2147483647
这个最大整数的二进制表示,头部少了一位,说明java中最高位用1表示,
这个永远占据最高位
1111111 11111111 11111111 11111111
System.out.println(Integer.MIN_VALUE);//打印最小整数:-2147483648
自己写出其二进制表示的原码
0111 1111 11111111 11111111 11111111
原码 反码 补码
- 127 1111 1111 -〉 0111 1110 -〉 0111 1111
127 0111 1111 -〉 1000 0000 -〉 1000 0001
128(无)
-128 1000 0000 -〉 0111 1111 -〉 1000 0000
原码中负的0表示最小的那个数字(只有这个地方特别)
0111 1111补码加1变1000 0000(从-127到-128) 再加一变成1000 0001
单字节-127,原码是1111 1111,反码1000 0000,补码是1000 0001,计算机中单字节-127表示为1000 0001。
单字节-128,原码貌似表示不出来,除了符号为,最大的数只能是127了,其在计算机中的表示为1000 0000。
2、大小的习惯(个人观点)
也可以从数据大小上来理解。还是以单字节数据为例。有符号数中,正数的范围是[1,127],最大的是127,不考虑符号为,其表示为111 1111;最小的是1,不考虑符号为,其表示为000 0001。
负数中,最大的是-1,我们就用111 1111表示其数值部分。后面的数据依次减1。减到000 0001的时候,我们用它标示了-127。再减去1,就变成000 0000了。还好我们有符号为,所以有两个0。把其中带符号的0拿过来,表示-128,刚好可以满足表示范围。
public int NumberOf1(int n){
if(n<0) n=(-n)+1;
int count =0;
//反复调用开始传入被除数n>=0
while(n!=0){//只要被除数不为0就循环
if(n%2==1) count++;
n = n/2;
}
return count;
}
//赋百度文库的链接
https://wenku.baidu.com/view/b3474ccfd5d8d15abe23482fb4daa58da0111cc5