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