首页 > 编程知识 正文

右移运算符例子,位运算符左移一位

时间:2023-05-06 08:02:30 阅读:120227 作者:628

1、左移运算符:

首先,随意定义int型的数量int。 十进制value=733183670,转换为二进制后,在计算机上表示为:

value 1,向左移动1位

如果左移一位并换算成十进制,则为1466367340,正好是733183670的两倍。 有些人在用2操作时喜欢用左移运算符替换。

value 8,试着向左移动8位:

移动左8位变为10进制的值为-1283541504,移动8位后,开头变为1,也就是变为负,使用中必须考虑为负的情况。

根据这个规则,向左移动32位后,向右添加32个0值,不是就会变成十进制的0吗? 答案是否定的。 int型进行左移操作时,左移位数为32位以上时,首先求出馀数%,然后进行左移操作。 即,向左移位32位相当于不进行移位操作,向左移位40位相当于向左移位8位(402=8)。 long类型执行左移操作时,long类型在二进制中用64位表示,因此要求进行剩馀操作的基数也为64。 也就是说,左移64位不移位,左移72位相当于左移8位(72d=8),写测试int intValue=733183670的代码。 //随便写数字

system.out.println('intvalue:' ) ) ) intvalue ); intValue 1打印系统. out.println (“intvalue向左移动一位”) ) (intValue 1) ); //左移1位system.out.println(intvalue左移8位:() (intValue 8) ); //左移8位//int类型左移位数为32位以上的操作时,求出馀数后进行移位操作

system.out.println('intvalue左移32位: ' (intValue 32 ); //求馀数时322=0,相当于向左移动(不移动) 0位

system.out.println (向左移动40位:() (intValue 40 ) ); 求//馀数402=8,相当于向左移动8位

system.out.println('intvalue左移64位: ' (intValue 64 ); //馀数的求出为642=0,相当于向左位移0位(不位移)

long longValue=733183670L;

system.out.println('longvalue:' ) ) longvalue );//打印longValue 1system.out.println (“long value向左移动一位”) ) (long value1); //向左移位1位system.out.println(longvalue向左移位8位) () (longValue 8) ); //向左移位8位长类型的左移位数为64位以上的操作时,求出馀数后进行移位操作

system.out.println('longvalue左移64位:') (longValue 64 ) ); //求馀数时,64d=0,相当于向左移动(不移动) 0位

system.out.println('longvalue左移72位:') (longValue 72 ); 求//馀数时72d=8,相当于向左移动8位

system.out.println('longvalue左移128位:') (longValue 128 ); //馀数的求出为128d=0,相当于向左位移0位(不位移)

请看结果:

double、float的二进制表示形式特殊,无法进行移位操作、错误报告或编译。 下图:

注意:其他一些整形字节在短移位之前先转换为int类型(32位),然后再移位,但在此不写代码测试。 如果你感兴趣的话请自己测试。

综上所述,向左移动很容易。 也就是说,舍弃左边的指定位数,在右边添加0。

2、右移位运算符:

还是这个数: 733183670

value 1,向右移动1位

在向右移位一个位之后,换算为十进制数的值为366591至835,正好是733183670的一半。 有些人喜欢在除以2时用右移位运算符代替

value 8,试着向右移动8位

请编写代码测试java

int intValue=733183670; //随便几个system.out.println('intvalue:' (

intValue));//打印intValue System.out.println("intValue右移1位:" + (intValue >> 1));//右移1位 System.out.println("intValue右移8位:" + (intValue >> 8));//右移8位 //当int类型右移位数大于等于32位操作时,会先求余后再进行移位操作

System.out.println("intValue右移32位:" + (intValue >> 32));//求余为32%32=0,相当于右移0位(不移位)

System.out.println("intValue右移40位:" + (intValue >> 40));//求余为40%32=8,相当于右移8位

System.out.println("intValue右移64位:" + (intValue >> 64));//求余为64%32=0,相当于右移0位(不移位)

long longValue = 733183670L;

System.out.println("longValue:" + (longValue));//打印longValue System.out.println("longValue右移1位:" + (longValue >> 1));//右移1位 System.out.println("longValue右移8位:" + (longValue >> 8));//右移8位 //当long类型右移位数大于等于64位操作时,会先求余后再进行移位操作

System.out.println("longValue右移64位:" + (longValue >> 64));//求余为64%64=0,相当于右移0位(不移位)

System.out.println("longValue右移72位:" + (longValue >> 72));//求余为72%64=8,相当于右移8位

System.out.println("longValue右移128位:" + (longValue >> 128));//求余为128%64=0,相当于右移0位(不移位)

结果:

和左移一样,int类型移位大于等于32位时,long类型大于等于64位时,会先做求余处理再位移处理,byte,short移位前会先转换为int类型(32位)再进行移位。以上是正数的位移,我们再来看看负数的右移运算,如图,负数intValue:-733183670的二进制表现如下图:

右移8位,intValue >> 8

综上所述:右移运算符>>的运算规则也很简单,丢弃右边指定位数,左边补上符号位。

3、无符号右移运算符:>>>

无符号右移运算符>>>和右移运算符>>是一样的,只不过右移时左边是补上符号位,而无符号右移运算符是补上0,也就是说,对于正数移位来说等同于:>>,负数通过此移位运算符能移位成正数。以-733183670>>>8为例来画一下图

无符号右移运算符>>的运算规则也很简单,丢弃右边指定位数,左边补上0。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。