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