请教JAVA的移位运算符的方法

<< >> >>>
我就知道上面3种是左移,带符号右移,无符号右移,但具体怎么算法我不会,请朋友们赐教下
比如说,1个2进制:11010011,跟-11010011
上述2组进过3种移位后,各的多少,麻烦详细说下原理,谢谢

11010011 << 1
表示所有位居向前移一位,原有的符号保留,如果是正数还是正数,负数还是复数。位移以后的数为:10100110,由于在向前移的过程中,原来的第一位超出了范围,所以将被舍弃,原来的最后一位向前移以后,不足的位数用0填充。

11010011 >> 1
移完以后的结果为01101001.每个位上的数字均向右移一位,不足的位用0填充,原来最后一位1将被舍弃。

而<<< 和 >>>都表示无符号位移,-11010011 将按照<<和>>的规则进行位移,但是无论是<<< 还是 >>>,都表示得出的最终结果是没有符号的,也就是这样位移出来的结果都是正数。;利用这个特性,在一些需要取随机正整数的地方或者其他需要忽略符号以及需要将负数通过位移变为正数的计算中,可以利用这个特性方便快捷的得出计算结果。

简单的讲,<<表示2的整数倍的乘积计算。比如,1 << 3 = 1 * (2 * 2 * 2) = 8 , 1 << 1 * (2 * 2 * 2 * 2) = 16,
>>表示2的整数倍的除运算
16 >> 4 = 16 / (2 * 2 * 2 * 2) = 1,
16 >> 3 = 16 / (2 * 2 * 2) = 2,
16 >> 2 = 16 / (2 * 2) = 4,
16 >> 1 = 16 / (2) = 8,
但是大部分的数字都不是2的整数倍的,比如17在位移的时候,得出的结果与16是一样的,因为位移的结果没有小数,即使是8.999999,也将被取整为8.

最终结果(楼主没有说明位移几位,例子就以位移一位和2位为主)
11010011 << 1 10100110
11010011 << 2 01001100
-11010011 << 1 -10100110
-11010011 << 2 -01001100

11010011 >> 1 01101001
11010011 >> 2 00110100
-11010011 >> 1 -01101001
-11010011 >> 2 -00110100

11010011 <<< 1 10100110
11010011 <<< 2 01001100
-11010011 <<< 1 10100110
-11010011 <<< 2 01001100

11010011 >>> 1 01101001
11010011 >>> 2 00110100
-11010011 >>> 1 01101001
-11010011 >>> 2 00110100
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-03-21
  学习Java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,通过Java学习机构学到Java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累。

  今天给大家分享的技术知识是:Java中的位移运算符!
  1) “有符号”左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。
  左移移位相当于乘以2,例如
  3 << 2 //12 则是将数字3左移2位 3*2*2 = 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)位运算符的优先级
  ~的优先级最高,其次是<<、>>和>>>,再次是&,然后是^,优先级最低的是|。

java位移运算符
1) “有符号”左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。左移移位相当于乘以2,例如 3 << 2 \/\/12 则是将数字3左移2位 3*2*2 = 3*(2的2次方)分析:首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧...

关于Java的算术右移运算符
整数除法总是zero-round,即商总是向靠近0的数方向进行舍入。因为要向0靠近,所以负数在除2的幂之前会先加上一个偏移量2的k次方减1(2k-1,k为右移的位数)以修正 假设8位有符号表示:则-5的补码为 1111 1011 右移一位: 1111 1101 上面的结果是-3的补码,和实际不符(-5\/2 = -2)加上...

java中的移位问题 程序如下
1. <<:左移运算符,在没有数字溢出的情况下,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。2. &:位运算符,当两边操作数的位同时为1时,结果为1,否则为0。如111 & 101 = 101。切入正题:1. 为了取得32位完整的二进制数,需要循环32次,1<<31即2的31次方,表示最...

java >>=怎么算的
java中>>代表的是向右移位运算,而>>=代表的是向右移位运算时将运算的结果同时赋值给原值,举个例子说明一下:int index = 7;int index2 = index>>1,则表示将7转化为二进制数后向右移动一位,而原值不变,故index = 7 ,index2 = 3;int index3 = index>>=1,则表示将7转化为二进制...

JAVA面试题,请问这两个(-2>>2 ,2<<2)的值分别是什么?为什么。谢谢_百度...
三种移位运算符的移动规则和使用如下所示:<<运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。语法格式:需要移位的数字 << 移位的次数 例如: 3 << 2,则是将数字3左移2位 计算过程:3 << 2 首先把3转换为二进制数字0000 0000 0000 0000 0000 0000...

java中:-4<<2怎么算的。 -4321>>>30这题有什么简单算法没有?_百度知 ...
三种移位运算符的移动规则和使用如下所示:<<运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。语法格式:需要移位的数字 << 移位的次数 例如: 3 << 2,则是将数字3左移2位 计算过程:3 << 2 首先把3转换为二进制数字0000 0000 0000 0000 0000 0000...

关于移位
“ < <”, “> > ”, “> > > ”在Java中是左移、有符号右移和无符号右移运算符。位移运算符只对int值进行操作,如果不是int,编译器会报错。在Java中,一个int的长度始终是32bit,也就是4个字节。比如t> > > n的含义就是把整数t右移n位,高位补上零。所以如果t是个负数,最...

java中“<<”是什么啊!例如2 << 3=8是怎么算的啊!
<<是左移运算符,value<<num是指把value左移num位。每左移一位,最高位被移出,并且用0填充右边。在对byte和short类型的值左移时会自动扩展为int型。每次左移都相当于使操作数翻倍,可以通过这种方法来进行快速乘2的运算。2<<3就是2左移3次,也就是2乘以2的三次方,结果应该是16。

java中位移操作和乘法的区别
<< : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >> 1,相当于num除以2 >>> : 无符号右移,忽略符号位,空位都以0补齐 对于:>>> 无符号右移,忽略符号位,空位都以0补齐 value >>> num -- num 指定要移位值value 移动的位数。无符号右...

java中2>>1 结果为1 ; 2>>2结果不是应该为0.5; 2>>3结果不是应该为0.25...
右移运算符>>使指定值的所有位都右移num位 2 >> 1 00000010 右移1位后 00000001 1;2 >> 2 00000010 右移2位后 00000000 0;2 >> 3 00000010 右移3位后 00000000 0;这样你应该看懂了吧!!

相似回答