1.符号:<<:左移,>>右移,>>>无符号右移
n<<1:n*2 n>>1:n/22.左移规则:向左移指定的位数,低位补零,高位舍弃多出的位数 举例:
1001<<1:00010010 1001<<2:00100100 00001010<<1:000101003.无符号右移规则:高位(左边)补零,低位(右边)舍弃指定的位数
1001>>1:000001004.有符号右移规则:正数:高位插零,负数:高位插一,低位(右边)舍弃指定的位数
正数:00001001>>1:00000100 负数:10001001>>1:11000100 10001001>>2:111000105.应用场合 <1>已知一个整数,求其二进制数中,1的个数。 常规思路:对每一位都依次与1&一下为0,则为0,为1则为1.
package day03; /** * @author wangpei * @version *创建时间:2017年2月7日 下午9:09:35 *输入十进制数,输出二进制数一的个数 */public class Exercise01 { public static int getNumber(int x){ int count=0; int flag=1; while(flag!=0){ if((flag&x)!=0) count++; flag=flag<<1; } return count; } public static void main(String[] args) { System.out.PRintln(Exercise01.getNumber(8)); }}解释:用1左移不用x右移的原因,右移,当x为负数时,会出现一直做右移运算,陷入死循环。例如10000001>>1:11000000,会改变高位的值,一直在补1,而对于,正数,可以用移x. (2)不用加减乘除,做加法
新闻热点
疑难解答