标签:
补码:
补码又称为二补数,就是就是将该数字作比特反相运算(即一补数或反码),再将结果加 1,一个负数可以由其相反数的补码来表示。补码的好处在于:两数之间的减法亦可表示为一个数与另一数补码之间的加法,从而只需使用加法电路和二补数电路即可完成各种有符号数的加减法。
e.g:有0011(3)和1111(-1),0011+1111=10010(2)
在n比特的二进制数中,最大整数为2n-1-1,最小负数为-2n-1,第n位为符号位。
计算补码:
如5用8位二进制数表示为0000 0101,则其一补数即反码为1111 1010,二补数为一补数加1,所以5的补码为1111 1011(-5)
说明:以e.g所示为例,0011+1111中的1111仅为-1的补码形式,而非15的二进制表达形式。
左移运算符:通用格式 value <<num num为左移的位数
运算法则:丢弃最高位,0进补最低位
对移位运算符来讲,右侧参数需要进行模32运算,前提是value为int型。
在数字没有溢出的前提下,左移一位相当于乘以2的一次放,左移n位相当于乘以2的n次方
当左移的运算数是short,或者byte类型时,左移后会自动转换成int型
右移运算符:value>>num
运算法则:低位舍去,高位补符号位
右移一位相当于除以2,右移n位相当于除以2的n次方
无符号右移 value>>>num
忽略符号位的扩张,0补最高位
无符号右移只对32位,64位值有意义
1 public static void main(String args[]){
2
3 int i=1;
4 System.out.println(Integer.toBinaryString(i));
5 System.out.println(i<<3);
6 System.out.println(Integer.toBinaryString(i<<3));
7 System.out.println(i<<35);
8 System.out.println(Integer.toBinaryString(i<<35));
9
10
11 int t;
12 int num = 0xFFFFFFE;
13 System.out.println("num="+num+"二进制表示为"+Integer.toBinaryString(num));
14 for(t=0; t<4;t++) {
15 num = num << 1;
16 System.out.println("num="+num+"二进制表示为"+Integer.toBinaryString(num));
17 }
18 System.out.println("-32"+"二进制表示为"+Integer.toBinaryString(-32));
19
20 }
标签:
原文地址:http://www.cnblogs.com/wpzy2311/p/4220055.html