摘要:前言上一道關(guān)于位運算的題目數(shù)字的補(bǔ)數(shù),原題目如下給定一個正整數(shù),輸出它的補(bǔ)數(shù)。示例輸入輸出解釋的二進(jìn)制表示為沒有前導(dǎo)零位,其補(bǔ)數(shù)為。
前言
LeetCode上一道關(guān)于位運算的題目數(shù)字的補(bǔ)數(shù),原題目如下:
給定一個正整數(shù),輸出它的補(bǔ)數(shù)。補(bǔ)數(shù)是對該數(shù)的二進(jìn)制表示取反。
注意:
給定的整數(shù)保證在32位帶符號整數(shù)的范圍內(nèi)。
你可以假定二進(jìn)制數(shù)不包含前導(dǎo)零位。
示例 1:解題思路
輸入: 5
輸出: 2
解釋: 5的二進(jìn)制表示為101(沒有前導(dǎo)零位),其補(bǔ)數(shù)為010。所以你需要輸出2。示例 2:
輸入: 1
輸出: 0
解釋: 1的二進(jìn)制表示為1(沒有前導(dǎo)零位),其補(bǔ)數(shù)為0。所以你需要輸出0。
這道題目我解題的思路是先嘗試對某個數(shù)字取反,然后通過位運算把前導(dǎo)零位取反后的1變回0,以入?yún)?舉例:
對5(二進(jìn)制表示為101)取反,獲得11111111111111111111111111111010
要使11111111111111111111111111111010變成101,只需要讓
11111111111111111111111111111010 & 00000000000000000000000000000111 ------------------------------------ 00000000000000000000000000000101
&為與運算,那么此時的問題就是如何生成前32-3=29(前導(dǎo)零位的位數(shù),注意int應(yīng)該是31位的,但是這個還把符號位也算上了)個的0和3個1組成的二進(jìn)制數(shù)字了
00000000000000000000000000000111可以通過以下方式獲得~((~0)<<3),簡單來說就是
對0取反獲得全為1的二進(jìn)制制數(shù),即11111111111111111111111111111111
再左移3位(入?yún)⒌挠行粩?shù)),得到11111111111111111111111111111000
最后取反,得到00000000000000000000000000000111
其實就是使用逆推法來解題。
實現(xiàn)代碼/** * 數(shù)字的補(bǔ)數(shù) * @param num * @return */ public int findComplement(int num) { //有效位數(shù) int offset=32-Integer.numberOfLeadingZeros(num); return (~num)&(~((~0)<
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76834.html
摘要:將補(bǔ)數(shù)的概念用到計算機(jī)中,便出現(xiàn)了補(bǔ)碼這種機(jī)器數(shù)。通常,從原碼形式入手來求補(bǔ)碼。它與補(bǔ)碼的區(qū)別是末位少加一個,因此很容易從補(bǔ)碼的定義推出反碼的定義。若真值為純小數(shù),它的反碼形式為其中表示符號位。 一、原碼表示法 原碼表示法是一種最簡單的機(jī)器數(shù)表示法,其最高位為符號位,符號位為0時表示該數(shù)為正,符號位為1時表示該數(shù)為負(fù),數(shù)值部分與真值相同。若真值為純小數(shù),它的原碼形式為Xs,.X1X2X...
摘要:將補(bǔ)數(shù)的概念用到計算機(jī)中,便出現(xiàn)了補(bǔ)碼這種機(jī)器數(shù)。通常,從原碼形式入手來求補(bǔ)碼。它與補(bǔ)碼的區(qū)別是末位少加一個,因此很容易從補(bǔ)碼的定義推出反碼的定義。若真值為純小數(shù),它的反碼形式為其中表示符號位。 一、原碼表示法 原碼表示法是一種最簡單的機(jī)器數(shù)表示法,其最高位為符號位,符號位為0時表示該數(shù)為正,符號位為1時表示該數(shù)為負(fù),數(shù)值部分與真值相同。若真值為純小數(shù),它的原碼形式為Xs,.X1X2X...
摘要:返回該數(shù)字即可。思路題目描述得已經(jīng)很清楚了。要注意對調(diào)的時候,不能直接對調(diào)。需要先把換成除之外的其他字符,最后再把他替換過來。因為會按順序逐個替換。替換完成之后,在用轉(zhuǎn)換成十進(jìn)制即可。最終代碼若覺得本文章對你有用,歡迎用愛發(fā)電資助。 476. Number Complement 題目鏈接 476. Number Complement 題目分析 給定一個數(shù)字,將他轉(zhuǎn)換成二進(jìn)制后,將0和1...
摘要:錯開折騰經(jīng)歷文章目錄前言思路設(shè)備配置程序代碼小愛訓(xùn)練測試總結(jié)前言之前已經(jīng)進(jìn)行了項目二接入小愛同學(xué)以及項目三空調(diào)控制,接下來便是將二者合一,實現(xiàn)控制,溫濕度查看,以及小愛同學(xué)進(jìn)行簡單空調(diào)控制。 ...
摘要:紅外模塊接入板子后,可進(jìn)行以上操作,并接入,通過控制空調(diào)。材料清單板子紅外接收模塊紅外發(fā)射模塊線杜邦線左邊是紅外發(fā)射模塊,右邊是紅外接收模塊。 錯開の折騰經(jīng)歷:ES...
閱讀 1666·2021-10-27 14:13
閱讀 1908·2021-10-11 10:59
閱讀 3416·2021-09-24 10:26
閱讀 1955·2019-08-30 12:48
閱讀 3065·2019-08-30 12:46
閱讀 2063·2019-08-30 11:16
閱讀 1454·2019-08-30 10:48
閱讀 2787·2019-08-29 16:54