找出二進位制表示中1的個數相同,且大小最接近的那兩個數
{
/*
計算c0和c1
*/
int c=n;
int c0=0;
int c1=0;
while(((c&1)==0) && (c!=0))
{
c0++;
c>>=1;
}
while((c&1)==1)
{
c1++;
c>>=1;
}
/*
* 錯誤:若n==1111....1111000....00,那麼就沒有更大的數字
*/
if(c0+c1==31||c0+c1==0)
{
return -1;
}
int p=c0+c1;//最右邊,非拖尾0的位置
n|=(1<<p);//翻轉最右邊,非拖尾0
n&=~((1<<p)-1);//將p右方的所有位清零
n|=(1<<(c1-1))-1;//將右方插入(c1-1)個1
return n;
}
相關推薦
找出二進位制表示中1的個數相同,且大小最接近的那兩個數
public int getNext(int n){/*計算c0和c1*/int c=n;int c0=0;int c1=0;while(((c&1)==0) && (c!=0)){c0++;c>>=1;}while((c&1)==1){c1++;c>>
二進位制表示中1的個數與異或關係
本文主要討論一下二進位制表示中1的個數和異或的關係,本文各種結論的證明都會省去,方便記憶。 問題:給定兩個數a,b,判斷a^b在二進位制表示下1的個數的奇偶性。 分析:設a在二進位制表示下1的個數為x,b在二進位制表示下1的個數為y,a中0匹配了b中k個1.(最後一句話可能有誤,不過不影響判斷奇偶性).
劍指offer刷題-數二進位制表示中1的個數
題目描述 時間限制:1秒 空間限制:32768K 熱度指數:294626 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 當n>0時,就容易處理了 s = '%s' %
【劍指offer】輸入一個整數,輸出該數二進位制表示中1的個數,其中負數用補碼錶示。
題目要求 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 核心思路 如果一個整數不為0,那麼這個整數至少有一位是1,如果把這個整數減1,那麼原來整數最右邊的1就會變為0,原來在1右邊的所有0都會變為1。那麼,利用n = n & (n - 1),
二進位制位的翻轉和二進位制表示中1的個數
但是更加詳細的說明如下: 這兩個函式極很是巧妙,作了平行計算。 問題1: 將某數的二進位制中各位翻轉 unsigned char reverse8( unsigned char c ) { c = ( c & 0x55 ) << 1 |
判斷一個正整數二進位制表示中1的個數/////////////質數判斷
一、一個正整數二進位制表示中“1”個數 java程式碼實現 //演算法一----快速法 public Class Solution { public int NumberOf1(int n) { int count=0;
Java實現輸入一個整數,輸出該數二進位制表示中1的個數
public class Test { // 利用Java內建toBinaryString方法來實現 public static int numberOfOne1(int n) { int count = 0; String
【C語言】輸入一個整數,輸出該數二進位制表示中1的個數(三種方法)
輸入一個整數,輸出該數二進位制表示中1的個數。如輸入32,輸出1.程式碼實現:方法1:與運算#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int FindOne
【程式設計之美】任意給定一個32位無符號整數n,求n的二進位制表示中1的個數
任意給定一個32位無符號整數n,求n的二進位制表示中1的個數,比如n = 5(0101)時,返回2,n = 15(1111)時,返回4。這也是一道比較經典的題目了,相信不少人面試的時候可能遇到過這道題吧,我今天就遇到了,當時懵了。現在想想多簡單,浪費了一次機會。 1.普通法
int abs(int number)函式有感: 求補碼和通過補碼求對應的整數 C++(增加:數字的二進位制表示中1的個數)
#include "limits.h" #include "math.h" int abs(int number) { int const mask = number >> (si
c語言:統計整數二進位制表示中1的個數(漢明重量)
問題描述:對於一個位元組的無符號整型變數,求其二進位制表示中1的個數。第一次見到這個問題應該是icephone第一次例會的時候,問題雖然簡單,但也值得深思。後來查閱資料的時候才知道這個問題有個正式的名字叫Hamming_weight,也被一些公司當做面試題。下面通過幾個不同階
輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。
如何求二進位制中1的個數(三種方法) 思路:1.在32位中,二進位制表示數字1方式為 00000000 00000000 00000000 00000001 首先我們的第一個方法就是一位一位的找,從左
求一個數的二進位制表示中1的個數和0的個數
在我複習的過程中,很多面試題,甚至筆試題中,都用到了多次求一個整數的二進位制表達中1的個數或者0的個數,網上的資料比較亂,我在此做個小記錄,算是自己的一點總結,也希望對大家有幫助! 1.1 求二進位制數中 1 的個數(java版——演算法轉換) public int getNumOf
leetcode_461. Hamming Distance 計算漢明距離,按位異或運算,計算整數的二進位制表示中1的個數 java
題目: The Hamming distance between two integers is the number of positions at which the corresponding bits are different. Given two int
求無符號整數二進位制表示中1的個數
簡單粗暴的方法: 和1取與,計數然後移位。 int OnesNumber(unsigned int n) { int count = 0; while(n!=0) { if(n&1==1)//末尾是否為1 count
演算法—輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示
輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示! 明確幾點: 計算機中資料儲存形式位二進位制位。 正數以原碼形式儲存 負數以補碼形式儲存 int型別資料,佔4個位元組,一個位元組8位,所以int型別佔32個二進位制位。 比如:9的原碼位
一個整數二進位制表示中1的個數 java實現
題目:輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 題目解析:最直觀的解法是先判斷整數二進位制表示中最右邊以為是不是1.接著把整數右移一位(這邊用右移不用除以2,是因為除法運算效
python輸入一個整數,輸出該數二進位制表示中1的個數
# -*- coding:utf-8 -*-classSolution:defNumberOf1(self, n):# write code here cnt =0if n<0: n = n &0xffffffffwhil
輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示
思路:用位運算來做,與1,第一位保持不變,前面的置0,然後判斷,再右移 class Solution { public: int NumberOf1(int n) { int i = 0; int count = 0;
移位--判斷一個數二進位制表示中1的個數
問題: 給定一個數字,求其二進位制表示中1的個數。 思路: 假設給定數為n, 判斷n&1的結果,如果為1,證明這個數的二進位制表示末位為1,則count+1,然後n右移一位遞迴呼叫這個方法