把9999的各个2进制位置上的1的 值打印出来? 如何实现? 1的数量 二机制位 x(x-1)
把9999的各個2進制位置上的1的? ? 值打印出來?
如何實現(xiàn)?
#include <iostream.h>int a = 9999; int main() {while(a){int x = 0;x = a - (a&(a-1));a = a&(a-1);cout << x << endl;}return 0; }解釋x&(x-1)
將x的二進制值中,最后一個1置0,其它不變。即達到從x的尾部,刪除一個1的效果。
二進制的減法規(guī)則中可以得知,在做x-1時,當(dāng)把x寫作
A1B
的形式,其中A為隨意值,B為若干個0,可能為0個。
這時x-1的值,實際上是
A0C
的形式,其中A值不變,C為與B相同位數(shù)的1.
這樣
x&(x-1)的結(jié)果,根據(jù)按位與的特性,當(dāng)操作數(shù)一方為0時,結(jié)果為0,于是
x&(x-1) = A0B
對比x原始值A(chǔ)1B,x&(x-1)即把最后一個1改成0
?
相同的思路
世界上有10種人,一種懂二進制,一種不懂。那么你知道兩個int32整數(shù)m和n的二進制表達,有多少個位(bit)不同么?
2016年04月17日 15:59:12
閱讀數(shù):1879
世界上有10種人,一種懂二進制,一種不懂。那么你知道兩個int32整數(shù)m和n的二進制表達,有多少個位(bit)不同么?
輸入例子:
1999 2299
輸出例子:
7
public class Solution {/*** 獲得兩個整形二進制表達位數(shù)不同的數(shù)量* * @param m 整數(shù)m* @param n 整數(shù)n* @return 整型*/public int countBitDiff(int m, int n) {int dif = m^n;int count = 0;for(int i=0;i<32;i++){if(((dif>>i)&1)!=0)count++;}return count;} }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/qq_34692079/article/details/51173645
個人分類:?java編程
相關(guān)熱詞:?β世界?信息世界現(xiàn)實世界?現(xiàn)實世界信息世界?世界人口增長?世界建模
總結(jié)
以上是生活随笔為你收集整理的把9999的各个2进制位置上的1的 值打印出来? 如何实现? 1的数量 二机制位 x(x-1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何关掉mysql服务呢
- 下一篇: GC garbage collecti