日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flip Bits

發(fā)布時間:2024/3/26 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flip Bits 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Determine the number of bits required to flip if you want to convert integer?n?to integer?m.

Have you met this question in a real interview? ? Yes Example

Given?n?=?31?(11111),?m?=?14?(01110), return?2.

Note

Both?n?and?m?are 32-bit integers.

看到題目的第一想法是異或操作,c = a ^ b,然后右移求c的1的個數(shù)即為a,b不同的二進制位數(shù),但是一提交不對,為什么呢?思路是對的,只是細節(jié)沒有考慮清楚,假如a,b異號,那么c必然是小于0的數(shù),然而對于一個小于0 的數(shù)執(zhí)行右移操作會進入死循環(huán),因為帶符號的數(shù)右移會在右邊補充符號位,而不是0。既然這樣的話,-1右移會進入死循環(huán);那怎么解決呢?貌似要分情況了,當a,b同號時,直接右移統(tǒng)計1的個數(shù)是沒有問題的;當a,b異號時,則要求出c的源碼,然后統(tǒng)計源碼減1中0的個數(shù),這次不是統(tǒng)計1,而是統(tǒng)計0了。另外還有一個細節(jié)需要記住,因為在補碼的時候,是在原碼的基礎(chǔ)上取反,然后加了一個1,那為了跟補碼的情況保持一致,必須講原碼減去一個1,這樣0的個數(shù)才是原補碼1的個數(shù),這個細節(jié)非常重要。

class Solution { public:/***@param a, b: Two integer*return: An integer*/int bitSwapRequired(int a, int b) {// write your code hereint c = a ^ b;int count = 0, tmpc = c;if (c < 0)tmpc = ~(c - 1) - 1;while (tmpc){int bit = tmpc & 0x1;count = bit ? count + 1 : count;tmpc >>= 1;}if (c < 0)return 32 - count;return count;} };

總結(jié)

以上是生活随笔為你收集整理的Flip Bits的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。