當前位置:
首頁 > 最新 > 深入淺出一舉拿下晦澀的高位低位和左移右移

深入淺出一舉拿下晦澀的高位低位和左移右移

高位低位和古人云的上座下座或者左席右席有異曲同工之妙,大道至簡,只有到足夠高的層面,才能將各種概念打通,融會貫通。那麼左移右移又類似與升官發財節節攀升以及仕途不順連續被貶官。從官場的升級和降級,也可以對照出我們這裡的高位低位以及左移和右移的概念了。所謂一通百通,此之謂也。

我們按照一個位元組來理解高位、低位、左移和右移幾個概念。

高位和低位

一個位元組即8個比特位(bit),一個比特位即0或者1。如數字1是一個位元組表示出來的整數,用比特位表示就是:00000001

高位和低位從數學上理解就是,個十百千萬...個是低位,十是相對的高位,越往後面位越高。其實位高位低就看這個為的權重是大是小。123,1是百位,2是十位,3是個位,

所以分別代表著權重10的2次方、10的一次方和10的0次方。權重的值越大,表示這個數字背後的實力越強大。表面上是1、2、3三個數字,好像只隔了一個數大小而已。

舉一個實際的例子來理解,富二代出身的人和平民出身的人,看上去好像是一個人在穿著的差別,然而實際上是整個家族實力的懸殊。在人類社會裡有一句叫做位高權重,此之謂也。

位高權重在進位的高位和低位是一樣的意思,不要看表面的數字,這個數字所在的位置不一樣,權重就不一樣。那麼這個位置就是大家去制定的公認的表示方法。

比如在家裡坐席吃飯,上位表示最高低位的意思,兩邊則是附賓,下位是低位最低的,一般是主人陪坐。【這個不一定完全正確,個人理解】那麼這個規定是誰規定的呢?國家兩千年歷史形成的。

本來座位上4個方位就只是物理上的位置而已,卻由人類賦予了不同的含義。這就是位被指定的背後意義。那麼這個背後意義,也就隱藏了權重的含義。

也就是說,位高位低是人為的規定而已。所以規定,可以有不同的方式。可能在中國上位表示最尊貴,可能在另一個國度里,上位表示最卑賤。這由具體的文化來決定。但是不管怎麼樣,

總會有一個高位和低位的,只是規定的位置不一樣而已。

那麼在進位里的高位低位,同樣如此。在數學裡,123,最高位是1,最低位是3。為什麼會這樣呢?人為(數學家)規定的!而在00000001二進位表示中,最左邊是最高位,最右邊也是最低位。

這是書寫上和數學保持一致,方便理解。

然而在計算機中,萬事從0開始。也就是說,0位是最低位。而計算機內存的排列,我們從左到右依次是第0位、第1位...,這樣一來,在內存的二進位表示法中,我們手寫的00000001會表示成10000000.

實際上這兩種只是表示的差異而已,是一樣的數字1.這就是人為規定的不同的表示方法而已。和前面說的上位是一個道理,都是人為規定的一套表示方法。而不管在哪種表示方法中,都有低位和高位。

手寫的00000001中1所在的位置是最低位(大端排序,即高位在左),計算機內存表示的10000000中的1所在的位置是最低位(小端排序,即低位在左)。

我們需要清晰的知道,在哪裡是哪種表示方式,然後就可以準確識別高低位了,否則就很亂了。

左移和右移

前面已經解釋了,不同的位代表不同的權重,在二進位中,權重是以2的次方來表示的。權重越大,2的次方就越大。最低位就是2的0次方,高一位是1次方,以此類推。

那麼每一個位也就代表了一個權位,只要到達這個位,就進入了一個權位,那麼這個數字背後的權重就變成了這個位的權重了。不同的權位之間的切換,也就是通常說的進位和降位。

我們通常用數學的運算來進位降位,比如10進位中,加法超過了9就進位到了十位,超過了99就進位到了百位。進位後只看到一個數字1,然而這個1就是比之前的9和99大,也就是它的權重高。

通過減法,我們將數字降到99就要從百位中退回十位,原先是100,1代表百位,減一之後,不夠100,水平不一百位就降位為十位,也就變成99了。

這是我們通常的理解,通過運算來進位和降位。然而回歸到進位的本質,其實也就是位的向左移動一個位置還是向右移動一個位置而已。如果1在各位,就代表個數的1,如果移到相鄰的十位,就代表10了,再次移到百位,就代表100了。

這就是移位的原理。我們不需要通過計算就可以直接變換位置,更換權重。所以1*10=10,1*100=100,等價於將1移動到十位,將1移動到百位。

對於計算機來講,移動一個比特位,比計算乘法快的多。乘法需要乘法器的硬體支持,而移位則不需要額外的硬體支持。在對數字的按位權重的乘法和除法就可以直接用移位來完成,快捷方便。而對於非權重位倍數的乘法除法則不方便用移位。

這是移位在乘法和除法的應用。大多時候,我們移位只是將比特位作為最小的單位進行數據存儲,所以需要通過移位操作來操作每一個比特位。因為直接操作的最小單位是位元組,位元組包含了8個比特位。

我們不能直接讀寫比特位,所以需要使用一個手段去間接操作一個比特位。這樣就是位移操作的作用了。通過移位之後,形成交錯的不同的比特位矩陣,然後通過位或、位與、位非、異或等位操作實現將多餘的位屏蔽掉,將操作的位留下,這樣就可以間接操作了比特位,最後還原成操作之後的數字。

所以,左移右移和位操作是緊密相關的。而應用一方面用於乘法除法的快捷實現,另一方面就是比特位的操作。

實際上,高位低位和左移右移,都是比特位的特性產生的一些概念。當然,高位低位與進位也是相關的。我們這裡說的高位低位是更加通用的高低位,不一定關聯到某一種進位,只是表示一個排列順序而已。

關注公眾號【CPP技術網】,看更多乾貨文章。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CPP技術網 的精彩文章:

TAG:CPP技術網 |