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