位移运算,首先要理解进制转换,以十进制,二进制转换为例
正整数和负整数二进制转换也不相同
正整数:
正整数转成二进制。要点一定一定要记住哈:除二取余,然后倒序排列,高位补零。
2:其二进制就是00000010
正整数二进制转成十进制:0*2^0+1*2^1=2
负整数:
负数二进制表示
负数是通过补码作为负数二进制表示
而补码等于原码在保持符号位不变的情况下其余位0和1互换得到反码,反码+1即为补码
例如 -5
其原码表示为:10000101(最左边1即为符号位,负数符号位是1)
反码:11111010
补码:11110101
-5的二进制表示即为:11110101
负数二进制转十进制:
就是将负数的二进制转为原码,最后得出十进制
还是以-5为例:
-5的补码是:11110101
则它的反码是:11111010
原码就是:10000101
所以其十进制表示为:-(1*2^0+0*2^1+1*2^2)=-5
位移运算符在程序开发中经常出现,例如2<<3,代表2左移3位,便捷计算方式
2*2^3=16
具体运算过程
首先将2转换为2进制即为:00000010
左移三位就是把该数字高位(左侧)的三个零移出,其他的数字都朝左平移3位,最后在低位(右侧)的三个空位补零。
二进数表示就是00010000,转换为十进制:1*2^4=16
负数位移运算
例如-5<<2,便捷计算方式:
-5*2^2=-20
具体运算方式
-5的二进制(补码):11110101
左移两位:就是把数字高位(左侧)两位移出,其他的数字都朝左移两位,最后在低位(右侧)的两个空位补1。
然后转为原码:10010100;转为十进制:-20.
右移运算
正数右移运算:
20>>2
便捷运算:20/2^2=5
具体运算过程
20的二进制:00010100
右移两位:就是把数字低位(右侧)两位移出,其他的数字都朝右移两位,最后在高位(右侧)的两个空位补0.
00000101=1*2^0+1*2^2=5
负数右移运算:
-20>>2
便捷运算:-20/(1*2^2)=-5
具体运算过程
负数的右移运算比正数相对复杂
首先得到-20的二进制(补码)
原码:10010100
反码:11101011
补码:11010111
右移两位:就是把数字低位(右侧)两位移出,其他的数字都朝右移两位,最后在高位(右侧)的两个空位补1.
得出:补码:11110101,然后将补码转为原码
补码:11110101
反码:11111010
原码:10000101
得出十进制:-(1*2^0+1*2^2)=-5