java位移运算符

java位移运算符,第1张

 学习Java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,通过Java学习机构学到Java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累。

今天给大家分享的技术知识是:Java中的位移运算符!

1) “有符号”左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。

左移移位相当于乘以2,例如

3 << 2 //12 则是将数字3左移2位 322 = 3(2的2次方)

分析:首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12数学意义:

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

2) “有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。 “有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。

>>运算规则:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,移位后得到的数字为正数则补0,负数补1。

例如11 >> 2,则是将数字11右移2位

分析:11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010转换为十进制是3数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。

3) Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0

4)右移一位相当于除以2,左移一位(在不溢出的情况下)相当于乘以2;移位运算速度高于乘除运算。

5)位运算符的优先级

~的优先级最高,其次是<<、>>和>>>,再次是&,然后是^,优先级最低的是|。

int表示32位整数,也就是说,用二进制表示出来它最多是32位

而你的a已经是32位的二进制数了,左移1位,变成33位,超过了int的表示范围。这个时候会产生“截断”,2^32

-

a

=

-4,就这是b的值

我晕啊,判断值正负的标准不就是是否大于0吗?这道理在哪里都通用,在你这里也只能通过这个方法来判断!不管你想在哪里进行运算,只要在你想进行判断的地方加上判断就可以了:

if(value < 0) {//在这里填入代码,进行负值的处理,比如你想在是负值的时候输出警告信息,那么就直接用Systemoutprintln输出字符串;如果你想在负值的时候不做任何处理,这里不要写任何代码}

else{//在这里填入代码,进行正值的处理,比如你想在正值的时候才能进行加减运算。}

IntegerparseInt(String s, int radix) 这个方法本身就不能转负数,只能转正数。如果你想转换-1,那只能是 IntegerparseInt("-1",2),同理,转-123,只能 IntegerparseInt("-1111011",2),即在本身正数对应2进制之前加一个“-”号。

对于“已知一个负整数的二进制数,求这个数的十进制数”这类问题的话,那么方法如下:

对字符串 *** 作,取反码,然后再按照上文所述方式转换,就可以得到所求负数+1,再-1,就可以得到所求负数

记得给分呦,亲~~~~

int 类型在 Java 中是“有符号”的。所谓“有符号”就是有正负。在计算机中用二进制表示所有的信息,这个符号的区别就看首位。

首位如果是 0,就是正的,1 就是负的。正与负的区别也因此就在于取反加一。这不仅在 Java,在任何语言中都是这样的。

所谓数值溢出就会出现这个现象。Java 中的 int 总共就 32 位,正数上限的情况首位也只能是 0,其他位都可以是 1(就是 2^31-1 的情况)。但是如果正数过大了,例如 2^31,计算机不得不把首位变成 1,并且很快就忘了这是溢出情况,把它按照正常的方式输出了,于是就成了负的。其实也不能怪它,它没有办法自动处理超过溢出的情况,因为 32 位是固定的,它不能因为溢出而临时扩展到 33 位之类的。

以上是负数的情况。溢出变成 0 的话道理也一样。你想如果一个数大到最后 32 位都是 0 了,那计算机只能把它认作 0。这种情况有很多,例如 2^32 就是一共 33 位,首位 1,后面 32 位都是 0。

int的负数取值就是补码。负数的补码是对其原码逐位取反,但符号位除外。然后整个数加1。比如-1这个数。原码:10000000,00000000,00000000,00000001。取反:11111111,11111111,11111111,11111110。加1:11111111,11111111,11111111,11111111。上面最后结果就是-1的补码。

以上就是关于java位移运算符全部的内容,包括:java位移运算符、JAVA中关于负数的位异或运算、java中如何判断获取的值是负值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9672359.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存