JavaShuo
欄目
標籤
Java中有趣的移位操做!完全弄懂各個移位操做符的使用方式
時間 2021-08-13
標籤
java
markdown
spa
code
orm
table
class
import
欄目
Java
简体版
原文
原文鏈接
<<
<<:
左移運算,左移幾位就補幾個
0
>>
>>:
右移運算,爲算術右移
若是數字爲正數時,移位後在前面補
0
若是數字爲負數時,移位後在前面補
1
>>>
>>>:
無符號右移,爲邏輯右移.忽略符號,空位補0
無符號右移規則:
忽略了符號位擴展,0補最高位,無符號右移運算符
>>>
只對
32
位和
64
位值有意義
若是要移位的數是正數時:
右移和無符號右移的值是同樣的
若是要移位的數是負數時:
右移後的值仍是負數
無符號右移後的值則爲正數
區別:
對於正數而言
,>>
和
>>>
沒有區別
對於負數而言,因爲無符號右移忽略了最高位數的符號位.因此:
-2 >>> 1 = 2147483647(Integer.MAX_VALUE)
-1 >>> 1 = 2147483647(Integer.MAX_VALUE)
所以要判斷兩個
Integer
類型的數符號是否相同,能夠這樣判斷:
return
((a >>
31
) ^ (b >>
31
)) ==
0
;
複製代碼
移位運算結果
在不大於自身數值類型最大位數的移位時,一個數左移
n
位,就是將這個數乘以
2
的
n
次冪
一個數右移
n
位,就是將這個數除以
2
的
n
次冪,而後取整
若是
移動位數
超出
自身數值類型的最大位數,
只要將
移位數
和
自身數值類型的最大位數取餘
獲得的
數字
套用方法便可
注意
三種移位運算做用的左操做數有五種:
long
int
short
byte
char
在做用不一樣的操做數類型時的具體操做過程不一樣,遵循如下原則:
int
移位時, 左操做數是
32
位,此時移位符號做用在
32
位
bit
上
好比:
1 >> 3,是將00000000 00000000 00000000 00000001這32位向右移動3位
long
移位時,左操做數是
64
位,此時移位符號做用在
64
位
bit
上
short,byte,char
在移位以前首先將數據轉換爲
int,
而後再移位,此時移位符號做用在
32
位
bit
上
好比:
(byte)0xff >>> 7,是將11111111 11111111 11111111 11111111這32位向右移動7位,獲得的結果是00000001 11111111 11111111 11111111
由上可知:
當左操做數爲
long
時,移位以後獲得的類型是
long
當左操做數是其它四種類型時,移位以後獲得的類型時
int
因此當左操做數是
short,byte,char
時,使用
>>=, >>>=, <<= .
實際上是將獲得的
int
作低位截取獲得的數值,獲得的值每每會錯
三種移位符號除了對左操做數有操做規則外,對右操做數也有操做規則:
若是左操做數是
int
或者轉換以後是
int,
那麼右操做數只有低
5
位有效,由於int總共就
32
位
22 >> 33 與 22 >> 1 的結果是同樣的,都是11
若是左操做數是
long,
那麼右操做數只有低
6
位有效
相關文章
1.
移位操做符
2.
Java移位操做
3.
java基礎-位操做符與位移操做符
4.
javascripte 中的移位操做符
5.
認識位移操做符
6.
c語言中的位移位操做
7.
高級操做符——位操做符講解(移位操做符~ 按位與'&'操做符~ 按位或'|'操做符~ 按位異或'^'操做符)
8.
移位操做的疑問
9.
JavaScript中的位操做符
10.
【譯】JavaScript中按位操做符的有趣應用
更多相關文章...
•
Java 中操作 R
-
R 語言教程
•
PHP 7 移除的擴展
-
PHP 7 新特性
•
常用的分佈式事務解決方案
•
C# 中 foreach 遍歷的用法
相關標籤/搜索
位移
移位
做操
操做
java神操做
各位
操做系統
Update誤操做
Linux操做
異步操做
Java
Markdown
Docker教程
Docker命令大全
Spring教程
java
應用
註冊中心
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
gitlab新建分支後,android studio拿不到
2.
Android Wi-Fi 連接/斷開時間
3.
今日頭條面試題+答案,花點時間看看!
4.
小程序時間組件的開發
5.
小程序學習系列一
6.
[微信小程序] 微信小程序學習(一)——起步
7.
硬件
8.
C3盒模型以及他出現的必要性和圓角邊框/前端三
9.
DELL戴爾筆記本關閉觸摸板觸控板WIN10
10.
Java的long和double類型的賦值操作爲什麼不是原子性的?
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
移位操做符
2.
Java移位操做
3.
java基礎-位操做符與位移操做符
4.
javascripte 中的移位操做符
5.
認識位移操做符
6.
c語言中的位移位操做
7.
高級操做符——位操做符講解(移位操做符~ 按位與'&'操做符~ 按位或'|'操做符~ 按位異或'^'操做符)
8.
移位操做的疑問
9.
JavaScript中的位操做符
10.
【譯】JavaScript中按位操做符的有趣應用
>>更多相關文章<<