摘要:雖然發生了符號位擴展,但是沒有任何問題。這就是計算機中原碼和補碼的奧秘之處。不過等你看懂了就會發現位運算的巧妙之處。這個函數的作用呢其實就是計算整形變量高位連續為零的個數。比如時二進制補碼就是原碼也就是,那么得到的結果應該是。
上一篇文章我們討論到byte強制轉換成int。然后拋出了一個問題,就是byte直接強制轉換成int一定會沒問題嗎?還是因為上面我們推導的那個例子只是個特例。好吧,正式回答下,一定是沒有問題的。雖然發生了符號位擴展,但是沒有任何問題。這就是計算機中原碼和補碼的奧秘之處。
我們來看下JDK中Integer類中的靜態方法numberOfLeadingZeros
public static int numberOfLeadingZeros(int i) { // HD, Figure 5-6 if (i == 0) return 32; int n = 1; if (i >>> 16 == 0) { n += 16; i <<= 16; } if (i >>> 24 == 0) { n += 8; i <<= 8; } if (i >>> 28 == 0) { n += 4; i <<= 4; } if (i >>> 30 == 0) { n += 2; i <<= 2; } n -= i >>> 31; return n; }
乍一看,啥跟啥。完全看不懂。不過等你看懂了就會發現位運算的巧妙之處。這個函數的作用呢其實就是計算整形變量i高位連續為零的個數。比如 i = 1 時 二進制補碼就是原碼也就是 00000000 00000000 00000000 00000001,那么得到的結果應該是31。這個函數本身有什么用呢,自己去猜吧。好吧,不賣光子了,比如你想知道一個int整形的比1021這個整數更大而且屬于2的次方冪。
1 << (32 - (Integer.numberOfLeadingZeros(i - 1))),得到的結果應該是1024。
未完待續 ...
原文鏈接:http://segmentfault.com/a/1190000003826303
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64636.html
摘要:正數的原碼,反碼和補碼相同。變量原碼反碼是符號位不變,其他位取反反碼補碼則是在反碼的基礎上加補碼所以在計算機中正確的表示應該是。原碼反碼補碼此刻開始轉換為類型,占個字節,符號位,用填充高位三個字節。 我們都知道計算機存儲的是二進制,長度是8個比特。 byte b = 10; int i = -10; long l = 10L; 那么以上幾個變量如何用二進制表示呢?很多人第一印象肯定是 ...
摘要:所以就想把一大串縮短點,將二進制中的三位用一位表示。以可以大寫也可以小寫開頭版本可以表示二進制了八進制的數據表現形式由組成。結果把系數基數的權次冪相加即可。因為語言采用的是碼來編碼的。 1_(常量的概述和使用)* A:什么是常量(constant) 在程序執行的過程中其值不可以發生改變 B:Java中常量的分類 字面值常量 自定義常量(面向對象部分講) C:字面值常量的...
摘要:局部變量聲明在函數內部的變量。在作用域范圍內不能出現命名沖突。 java編程規范: 1.良好的標識符的命名 保留字不能作為標識符命名: class、public、static..., goto,const 區分大小寫:helloWorld、HelloWorld 2.良好的注釋習慣 3.良好的縮進:沒遇到一個代碼塊縮進一次(一個tab鍵) 變量:代...
摘要:系列密碼學二傳送門密碼學一基礎密碼學算法分類消息編碼消息摘要類,類,對稱密碼非對稱密碼數字簽名五元組明文原始信息。非對稱密碼包提供給,,等非對稱加密算法。對稱加密算法在分布式網絡系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。 前言 最近一場面試,面試官問了我 對稱加密與非對稱加密的問題,雖然曾經看過一些內容,但是沒有系統的整理,所以當被問的時候,腦子里一片空白,沒有回答上...
摘要:而所有的數據運算都是采用補碼進行的。補碼解決負數加法運算正負零問題,彌補了反碼的不足。通過使用訪問修飾符可以使實例變量對子類可見暫時在學習基礎語法知識的時候可以暫時忽略實例變量這部分內容,這部分內容主要被使用在面向對象的部分,但是極其重要。 showImg(https://segmentfault.com/img/remote/1460000019264541?w=600&h=242)...
閱讀 3074·2021-11-19 09:40
閱讀 1559·2021-11-15 11:39
閱讀 662·2021-10-08 10:05
閱讀 2273·2021-09-03 10:29
閱讀 3406·2021-08-12 13:22
閱讀 2151·2019-08-30 15:54
閱讀 3706·2019-08-30 14:03
閱讀 2654·2019-08-30 13:45