java 位運算中移動位數超過資料長度和右移的兩種不同方式
記錄 java 位運算中的兩點注意事項:移動位數超過資料長度和右移的兩種不同方式。
int、long型別資料移動等於或超過最大位數
在 java 中,int 型別的資料長度為 32 位,如果將 int 型別左移或者右移大於或等於 32 位時,並不會像預計的那樣將資料全部填充為1或0。java 的處理方式是:當剛好為資料長度的整數倍時,即32、64······,資料保持原來不變;其他情況下移動除以 32 餘數的長度。同理 long 型別資料以 64 為變化基準。
在實際應用中,需要特別注意這點,當然也可以巧用此特性實現一些特殊演算法的設計。
算術右移、邏輯右移、無符號右移
在 java 中左移只有一種,以0補齊低位,運算子號為 <<。而又移分為兩種:算術右移 >> 和邏輯右移 >>>,其中邏輯右移也叫作無符號右移。
邏輯右移以0補全高位,而算術右移則是根據資料的第一位決定右移後高位補全的內容,若為1則補1,否則補0。
==========================================
疑問?幫助?批評?歡迎評論 | QQ:593159978
相關推薦
java 位運算中移動位數超過資料長度和右移的兩種不同方式
記錄 java 位運算中的兩點注意事項:移動位數超過資料長度和右移的兩種不同方式。 int、long型別資料移動等於或超過最大位數 在 java 中,int 型別的資料長度為 32 位,如果將 int 型別左移或者右移大於或等於 32 位時,並不會像預計
java 找到陣列中出現次數超過陣列長度一半的那個數字
/** * 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。 * 例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。 * 由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。
WIN8 與WIN7的64位及32位 分別對Legacy BIOS+MBR和UEFI+GPT兩種啟動方式和分割槽架構下的安裝可行性分析
微軟系統、相關產品官方映象下載:http://msdn.itellyou.cn/關於MBR、GPT、ESP、MSR、EFI、UEFI和WIN8中SECURE BOOT的基礎知識:1.MBR分割槽表:Master Boot Record,即硬碟主引導記錄分割槽表,只支援容量在 2.1TB 以下的硬碟,超過2
jQuery使用serialize(),serializeArray()方法取得表單資料+字串和物件型別兩種表單提交的方法
原始form表單值獲取方式(手動):$.ajax({ type: "POST", url: "ajax.php", data: "Name=摘取天上星&position=IT技
資料結構之圖的兩種儲存方式
第一種:鄰接矩陣 鄰接矩陣可以表示頂點之間的相鄰關係的矩陣,是一個n階方陣,可以用一個一維陣列來表示頂點資訊,用一個二維陣列來表示頂點之間的邊的聯絡以及權重 具體的程式碼如下: #include <stdio.h> #inc
Java移位運算中,數值右端的低5位才有用
Java移位運算中,數值右端的低5位才有用 晚上糾結了很久這個問題,不懂為什麼低5位才有用,怎麼就2^5等於32位,跟int的32位掛上鉤了,思考了很久終於明白了。 這段話有兩個出處: 一個是Java程式設計思想3.11移位操作符中出現,原話是“只有數值右端的低5位才有用”。 一個是
Java中double型別的資料精確到小數點後兩位
轉自:http://blog.sina.com.cn/s/blog_69bd73800100yaej.html 多餘位四捨五入,四種方法 一: double f = 111231.5585; BigDecimal b = new BigDecimal(f); do
Java位運算在程式設計中的使用:位掩碼(BitMask)
在Java中,位運算子有很多,例如與(&)、非(~)、或(|)、異或(^)、移位(<<和>>)等。這些運算子在日常編碼中很少會用到。 在下面的一個例子中,會用到位掩碼(BitMask),其中包含大量的位運算。不只是在Java中,其他編寫語言中
Java 位運算符 深入理解
clas 簡單的 二進制 ava white 最簡 bit ont 基於 在Java中存在著這樣一類操作符,是針對二進制進行操作的。它們各自是&、|、^、~、>>、<<、>>>幾個位操作符。不管是初始
Java-位運算
十進制數 移動 href 進制 位或 無符號 art java nbsp 原文鏈接:Java 位運算(移位、位與、或、異或、非) 1、左移(<<) 二進制數向左移動兩位,低位補0 2、右移(>>) 二進制數向右移動兩位,高位補0 當十進制數是負數
java位運算和無符號運算
補碼 二進制補碼 原碼、反碼、補碼 移位運算 不變 運算 負數 system 基礎上 計算機在底層使用的是二進制補碼進行運算。 計算規則: 正數的原碼、反碼、補碼是其二進制本身。 負數的原碼首先計算其二進制數,然後最高位使用1表示負數,反碼是最高位不變其它位取反,補
Java 位運算(移位、位與、或、異或、非)(轉)
位與 異或 print 我們 如果 運行 str 換算 system public class Test { public static void main(String[] args) { // 1、左移( << ) // 0000 0000 00
Java 位運算(移位、位與、或、異或、非)與邏輯運算
高效率 邏輯與 才會 system 區別 span get 右移 邏輯 java 位運算包括:左移( << )、右移( >> ) 、無符號右移( >>> ) 、位與( & ) 、位或( | )、位非( ~ )、位異或( ^
關於幾個java位運算的算法分析
這一 數組 blog 回歸 pan mask turn 判斷 二進制表示 問題一: 給定一個正整數N,求其二進制形式的第一個比特位1(從低位到高位的順序)。 例如,給定正整數12,其低8位二進制表示為:00001100 從低位到高位的順序,第一個1出現在第三位。 版本一:
Java 位運算
必須 計算 絕對值 nbsp pan 數字 異或 ont 符號 1.源碼 2.反碼 3.補碼 註意的規則: 1.正數的三個碼都是一致的,不需要轉換 2.負數必須轉換成補碼才能運算 3.計算機真正參與運算的是補碼 4.在java中所有的數字都是由符號的, 符號位0正數,1
Java 位運算符
直接 移位 value obi ash 沒有 AI 問題 oid 前言 最近在看hashMap的源碼,看到了一些位運算符,決定深入研究學習一下位運算符。 位運算 定義:程序中的所有數在計算機內存中都是以二進制的形式儲存的。位運算說穿了,就是直接對整數在內存中的二進制位進行操
java位運算
乘除 位與 取整 一點 運算 按位取反 java 區別 ava &:按位與,兩個都為1才為1 | :按位或,兩個都為0才為0 ^:按位異或,兩個不同才為1 註意和按位或的區別,"1|1=1"而1^1=0 ~:按位取反 >>:右移,註意前邊的符號位不動
java位運算符
關系 ring ava out nbsp 從表 tro 邏輯運算 關系運算 位運算符主要針對二進制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點像邏輯運算符,但邏輯運算符是針對兩個關系運算符來進行邏輯運算,而位運算符主要針對兩個二進制數的位進行邏輯運算。下
java-- 位運算
屏蔽 div 因此 的區別 進制數 也會 必須 等等 取反 一,Java 位運算 1.表示方法: 在Java語言中,二進制數使用補碼表示,最高位為符號位,正數的符號位為0,負數為1。補碼的表示需要滿足如下要求。 (1)正數的最高位為0,其余各位代表數值本身(二進
Java位運算應用
常見的位運算包括:與(&)、或(|)、非(~)、異或(^)、左位移(<<)、右位移(>>或>>>) 與運算:運算子兩邊運算元同為1時結果為1,否則為0。例:1010 & 1100 = 1000,多位運