首页 > 编程 > Java > 正文

java移位的具体应用

2019-11-10 18:04:21
字体:
来源:转载
供稿:网友

1.符号:<<:左移,>>右移,>>>无符号右移

n<<1:n*2 n>>1:n/2

2.左移规则:向左移指定的位数,低位补零,高位舍弃多出的位数 举例:

1001<<1:00010010 1001<<2:00100100 00001010<<1:00010100

3.无符号右移规则:高位(左边)补零,低位(右边)舍弃指定的位数

1001>>1:00000100

4.有符号右移规则:正数:高位插零,负数:高位插一,低位(右边)舍弃指定的位数

正数:00001001>>1:00000100 负数:10001001>>1:11000100 10001001>>2:11100010

5.应用场合 <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)不用加减乘除,做加法


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表