問題:
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。
**:
# -*- coding:utf-8 -*-
class solution:
def numberof1(self, n):
# write code here
count=0
if n<0:
n=n&0xffffffff
while n :
count+=1
n=n&(n-1)
return count
占用記憶體:5624k
1. 原碼,反碼和補碼:
正數:正數的原碼,反碼和補碼相同,都是將正數轉換為二進位制, 正數的符號位為0
如: 1: 0000 0001
3: 0000 0011
負數: 首先將負數的符號位置為1,然後將其轉換為二進位制,即獲得負數的原碼;
符號位不變,其餘位取反,即為負數的反碼
在補碼的基礎上+1,即負數的補碼
計算機字長為32位,負數&0xffffffff即可得到補碼,如:
input :bin(-1&0xffffffff)
output:0b11111111111111111111111111111110
2. 關於 n&(n-1)
乙個數字n,然後與 n-1 進行按位與,除了最靠右的 1 置零後,其他的高位的 1 沒有發生變化,每執行一次,就可以知道有乙個 1 .
如:6&5(十進位制) 《==》0110&0101 =0100(二進位制) = 4(十進位制)
《劍指offer》第十一 十二題(js)
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。在討論區學習來的方法,太妙了 方法一n 1 會將 n 最右邊的 1 及其右邊的 0 全部取反,再用 n 與它進行按位與運算,那麼就將原本最右邊的 1 及其右邊的 0 全部置為了 0,其餘位置不受影響。n 有多少個1 就會進行多少次這樣...
劍指offer第十一題 旋轉陣列的最小數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。coding utf 8 classsolution defminnum...
劍指offer第十一題 旋轉陣列的最小數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 3,4,5,1,2 為 1,2,3,4,5 的乙個旋轉,該陣列的最小值為1。示例 1 輸入 3,4,5,1,2 輸出 1 示例 2 輸入 2,2,2,0,1 輸出 ...