摘要:題目輸入一個整數(shù),輸出該數(shù)二進制表示中的個數(shù)。其中負數(shù)用補碼表示。二進制與運算符符號為,表示若兩個二進制位都為,則結(jié)果為,否則為。所以用于比較的這個數(shù)字初始值為,比較完后讓左移位,這樣就可以依次比較所有位是否為。
題目
輸入一個整數(shù),輸出該數(shù)二進制表示中1的個數(shù)。其中負數(shù)用補碼表示。
分析這是一道考察二進制的題目
二進制或運算符(or):符號為|,表示若兩個二進制位都為0,則結(jié)果為0,否則為1。
二進制與運算符(and):符號為&,表示若兩個二進制位都為1,則結(jié)果為1,否則為0。
二進制否運算符(not):符號為~,表示對一個二進制位取反。
異或運算符(xor):符號為^,表示若兩個二進制位不相同,則結(jié)果為1,否則為0
左移運算符m << n 表示把m左移n位,左移n位的時候,最左邊的n位將被丟棄,同時在最右邊補上n個0,比如:
00001010<<2 = 00101000
右移運算符m >> n 表示把m右移n位,右移n位的時候,最右邊的n位將被丟棄,同時在最左邊補上n個0,比如:
00001010>>2 = 00000010
我們可以讓目標數(shù)字和一個數(shù)字做與運算
這個用戶比較的數(shù)字必須只有一位是1其他位是0,這樣就可以知道目標數(shù)字的這一位是否為0。
所以用于比較的這個數(shù)字初始值為1,比較完后讓1左移1位,這樣就可以依次比較所有位是否為1。
代碼function NumberOf1(n) { let flag = 1; let count = 0; while(flag){ if(flag & n){ count++; } flag = flag << 1; } return count; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101249.html
摘要:問題描述輸入一個整數(shù),輸出該數(shù)二進制表示中的個數(shù)。其中負數(shù)用補碼表示。思路方法將二進制變成字符數(shù)組,遍歷數(shù)組統(tǒng)計的個數(shù),這種辦法不需要考慮正負數(shù)。遍歷字符數(shù)組,統(tǒng)計的個數(shù)判斷該位是否是,如果是就,否則執(zhí)行下一次循環(huán)。的二進制表示想右移一位。 1.問題描述 輸入一個整數(shù),輸出該數(shù)二進制表示中1的個數(shù)。其中負數(shù)用補碼表示。 2.思路 方法1:將二進制變成字符數(shù)組,遍歷數(shù)組統(tǒng)計1的個數(shù),這...
摘要:圖解第二種算法圖解代碼示例算法如果為真,說明拿到的是二進制序列的個數(shù)為算法為的時候說明已經(jīng)拿完了,循環(huán)終止二進制序列中的個數(shù)以上代碼,還可做優(yōu)化在此僅作參考,若有更好的算法,還望能夠私信告知,多謝各位。 ?前言?: 算法是一個程序員的內(nèi)功,能很好的體現(xiàn)程序員的編程思維,通過學習和掌握常見的算...
摘要:導航小助手劍指從尾到頭打印鏈表題目詳情解題思路源代碼總結(jié)劍指從尾到頭打印鏈表題目詳情輸入一個鏈表的頭節(jié)點,從尾到頭反過來返回每個節(jié)點的值用數(shù)組返回。時間復雜度方法先反轉(zhuǎn)鏈表并求長度,在將反轉(zhuǎn)后的鏈表數(shù)據(jù)拷貝至數(shù)組中。 ...
摘要:劍指系列刷題第一篇題目來源數(shù)組中數(shù)字出現(xiàn)的次數(shù)大家可以去測試一下自己的代碼博主碼云鏈接文章目錄前言題目描述解題思路解題代碼前言這是劍指系列刷題第一篇文章,大家可以互相學習一下。其中的兩個單身狗是和。 ...
閱讀 2390·2021-11-11 16:54
閱讀 2647·2021-09-26 09:47
閱讀 3994·2021-09-08 09:36
閱讀 2744·2021-07-25 21:37
閱讀 935·2019-08-30 15:54
閱讀 2551·2019-08-30 14:22
閱讀 3260·2019-08-30 13:57
閱讀 2613·2019-08-29 17:17