摘要:在學習源碼中,發現有大量使用位運算符,這樣做的目的是為了節約內存開銷和加快計算效率。位運算符,這個位代表這什么位二進制位簡稱位,是二進制記數系統中表示小于的整數的符號,一般用或表示,是具有相等概率的兩種狀態中的一種。
在學習源碼中,發現有大量使用位運算符,這樣做的目的是為了節約內存開銷和加快計算效率。
位運算符,這個”位”代表這什么?
位:二進制位簡稱“位”,是二進制記數系統中表示小于2的整數的符號,一般用1或 0表示,是具有相等概率的兩種狀態中的一種。二進制位的位數可表示一個機器字的字長,一個二進制位包含的信息量稱為一比特。摘自百度百科
int類型占4個字節(byte);一個字節=8bit(位);
一個int類型的數值占32bit(位)
int i = 123;?
10進制123轉為二進制后等于:1111011?
完整補位后:00000000 00000000 00000000 01111011
二進制的最高位為符號位,1代表負數,0代表正數,其余位表示數的絕對值
123轉為二進制補齊后為:00000000 00000000 00000000 01111011,這是123的原碼。?
負數的原碼按照絕對值轉為二進制后,最高位補1。?
-123的原碼:10000000 00000000 00000000 01111011
反碼:正數的反碼和原碼相同,負數的反碼為原碼除最高位外取反(0變1,1變0)。
補碼:正數的反碼和原碼相同,負數的補碼為原碼除最高位外取反+1。
123的原碼:00000000 00000000 00000000 01111011?
123的反碼:00000000 00000000 00000000 01111011?
123的補碼:00000000 00000000 00000000 01111011
-123的原碼:10000000 00000000 00000000 01111011?
-123的反碼:11111111 11111111 11111111 10000100?
-123的補碼:11111111 11111111 11111111 10000101
已知補碼求解碼?
最高位如果是1的話(負數),那么除了最高位之外的取反,然后加1得原碼。
最高位如果是0的話,不變,正數的補碼就是他的原碼。摘自
在計算機系統中,數值一律用補碼來表示和存儲。原因在于,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬件電路。?摘自百度百科
打個比方:2-1是怎么計算的?
2-1=2+(-1);?
2的補碼: 00000010?
-1的補碼:11111111?
結果0 00000001,最高位溢出丟棄2-1 = 1。?
有關原碼反碼補碼學習討論可以參考:?
原碼、反碼、補碼的產生、應用以及優缺點有哪些??
原碼, 反碼, 補碼 詳解
舉個例子:?
log:i2=0;
&比較的是boolean表達式時,右邊表達式的執行不受左邊結果影響,所以當i<8不成立后,還是會執行i2++。結果i2=0,i<8不成立if語句里面代碼未能執行。
&比較的是數值時,相對應位都是1,則結果為1否則為0。?
21&-1 = 21;?
正數補碼和原碼相同所以不必再轉換。負數需除最高位取反后+1得原碼。
按上面的例子,比較boolean表達式時左右兩邊都會執行,有一個為真則真。?
| 比較數值時,相對應位都是0則結果為0,否則為1。?
-21|-1 = -1;
^ 按位異或相對應位值相同則結果為0,否則為1?
-21^-1 = 20;
~ 按位取反~位運算符將每一位取反?
~21 = -22;?
~-22 = 21;
移位運算“有符號”左移<< 符號擴展機制值為正,則在高位補0,如果值為負,則在高位補1?
22<<3 = 176;
“有符號”右移>>?
-22>>4 = -2;
“無符號”右移>>>采用0擴展機制無論值的正負,都在高位補0?
-22>>>4 = 268435454;
閱讀更多
來自Google大佬的幾點寫簡歷的意見
Java高級進階,你必須要掌握這些數據結構
除了敲代碼,你還有什么副業嗎?
我就死磕安卓了,怎么了?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71383.html
摘要:廣告位出售垃圾回收機制淺析與理解對垃圾回收進行分析前,我們先來了解一些基本概念基本概念內存管理內存管理對于編程語言至關重要。里面的變量通常是局部變量函數參數等。 GC(@廣告位出售)垃圾回收機制: 淺析與理解 對垃圾回收進行分析前,我們先來了解一些基本概念 基本概念 內存管理:內存管理對于編程語言至關重要。匯編允許你操作所有東西,或者說要求你必須全權處理所有細節更合適。C 語言中雖然...
摘要:廣告位出售垃圾回收機制淺析與理解對垃圾回收進行分析前,我們先來了解一些基本概念基本概念內存管理內存管理對于編程語言至關重要。里面的變量通常是局部變量函數參數等。 GC(@廣告位出售)垃圾回收機制: 淺析與理解 對垃圾回收進行分析前,我們先來了解一些基本概念 基本概念 內存管理:內存管理對于編程語言至關重要。匯編允許你操作所有東西,或者說要求你必須全權處理所有細節更合適。C 語言中雖然...
CAS Compare And Swap.比較并交換.java中的同步器就是基于CAS技術實現的,為什么它能保證操作的同步性呢?因為是原子操作的一種,所以可以在多線程環境下來實現數據的交換操作不被打斷. CAS的缺陷ABA問題: 第一個線程來讀取變量A時被掛起;第二個線程過來操作A,將A賦值為B之后,并重新賦值為A;線程二完成操作;此時,對于線程一來說,所看到變量A的值是沒有變化的,但是實際上變...
閱讀 2260·2023-04-25 14:50
閱讀 1233·2021-10-13 09:50
閱讀 1866·2019-08-30 15:56
閱讀 1839·2019-08-29 15:29
閱讀 2886·2019-08-29 15:27
閱讀 3548·2019-08-29 15:14
閱讀 1192·2019-08-29 13:01
閱讀 3299·2019-08-26 14:06