把9999的各个2进制位置上的1的 值打印出来? 如何实现? 1的数量 二机制位 x(x-1)
生活随笔
收集整理的這篇文章主要介紹了
把9999的各个2进制位置上的1的 值打印出来? 如何实现? 1的数量 二机制位 x(x-1)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
把9999的各個2進制位置上的1的? ? 值打印出來?
如何實現?
#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的效果。
二進制的減法規則中可以得知,在做x-1時,當把x寫作
A1B
的形式,其中A為隨意值,B為若干個0,可能為0個。
這時x-1的值,實際上是
A0C
的形式,其中A值不變,C為與B相同位數的1.
這樣
x&(x-1)的結果,根據按位與的特性,當操作數一方為0時,結果為0,于是
x&(x-1) = A0B
對比x原始值A1B,x&(x-1)即把最后一個1改成0
?
相同的思路
世界上有10種人,一種懂二進制,一種不懂。那么你知道兩個int32整數m和n的二進制表達,有多少個位(bit)不同么?
2016年04月17日 15:59:12
閱讀數:1879
世界上有10種人,一種懂二進制,一種不懂。那么你知道兩個int32整數m和n的二進制表達,有多少個位(bit)不同么?
輸入例子:
1999 2299
輸出例子:
7
public class Solution {/*** 獲得兩個整形二進制表達位數不同的數量* * @param m 整數m* @param n 整數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
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/qq_34692079/article/details/51173645
個人分類:?java編程
相關熱詞:?β世界?信息世界現實世界?現實世界信息世界?世界人口增長?世界建模
總結
以上是生活随笔為你收集整理的把9999的各个2进制位置上的1的 值打印出来? 如何实现? 1的数量 二机制位 x(x-1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何关掉mysql服务呢
- 下一篇: GC garbage collecti