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