Count one

Count how many 1 in binary representation of a 32-bit integer.

Example
Given 32, return 1
Given 5, return 2
Given 1023, return 9

問題不難,通過位運(yùn)算(位移+位與)即可得到結(jié)果,需要注意的是細(xì)節(jié):

  1. 符號(hào)數(shù)的表示,負(fù)數(shù)的表示。負(fù)數(shù)的情況下,由于符號(hào)位的存在,如果對(duì) signed int 進(jìn)行位右移運(yùn)算,符號(hào)位會(huì)一直存在,數(shù)字最后無法變成0,會(huì)導(dǎo)致死循環(huán)。

  2. 二進(jìn)制的轉(zhuǎn)換成16進(jìn)制的符號(hào)表示,是4個(gè)二進(jìn)制位換算成一個(gè)16進(jìn)制位,1000 0000 --> 0X80,需要注意。

  3. Java 和 C 的數(shù)據(jù)類型不同,C 可以轉(zhuǎn)換成 unsigned int,Java 沒有 unsigned int。不過,突然想到 Java 中存在 unsigned shift >>>,不妨一試。

C 語(yǔ)言版:

int countOne(int num) {
   unsigned u = (unsigned) num;
   int counter = 0;
   while (u) {
       if(u & 0x1) {
           counter++;
       }
       u = u >> 1;
   }
   return counter;   
}

Java 版一(去除符號(hào)位版)

public int countOnes(int num) {
     
        boolean isNegative = false;
        if (num<0) {
            isNegative = true;
            num = num ^ 0x80000000;
        }
       
        int bitCount = 0;
        while(num != 0) {
            if((num & 0x1) == 1) {
                bitCount++;
            }
            num = num>>1;
        }
        
        if(isNegative) bitCount++;
        
        return bitCount;
    }

Java unsigned shift version:

 public int countOnes(int num) {
        int bitCount = 0;
        while(num != 0) {
            if((num & 0x1) == 1) {
                bitCount++;
            }
            num = num>>>1; // unsigned shift 
        }
        return bitCount;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,935評(píng)論 0 33
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,537評(píng)論 6 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,699評(píng)論 19 139
  • 參考鏈接 SqlPlus Set常用設(shè)置 常用命令 導(dǎo)出結(jié)果到文本:spool 例如:spool d:\Spool...
    iszengmh閱讀 1,157評(píng)論 0 0
  • 戴了綠帽子之后,林光鮮毅然斬?cái)嗲榻z,把自己長(zhǎng)時(shí)間封閉在黑暗的角落,用對(duì)初戀最狠毒的詛咒澆灌自己的戀愛觀與倫理觀,以...
    半點(diǎn)心helen閱讀 287評(píng)論 0 0

友情鏈接更多精彩內(nèi)容