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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

二进制位交换,反转,与统计1的个数

發布時間:2024/4/11 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二进制位交换,反转,与统计1的个数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題一:給一個整數v,求它的二進制表示中從右往左數第x位和第y位交換后的值(從0開始計數)。

?

分析:舉個例子,如果v的二進制表示為XXXXaXXXXXXbX,我們交換第1位和第8位。我們是這樣做的:

先把這兩位的值都取零后的值保存在一個變量里面,即tmp = XXXX0XXXXXX0X,然后再取ans = 0000b000000a0,那么可

以看出tmp | ans就是答案了。現在關鍵是求ans,ans可以成是這樣,ans = (((v>>y)&1)<<x)?|?(((v>>x)&1)<<y)。

?

那么很容易寫出代碼:

unsigned int _swap(int v,int x,int y) {return v & (~(1 << x)) & (~(1 << y)) | (((v >> y) & 1) << x) | (((v >> x) & 1) << y); }


?

問題二:給一個十進制整數v,求它的二進制表示反轉后對應的十進制數。

unsigned int Bit_Reverse(unsigned int v) {v = ((v >> 1) & 0x55555555) | ((v << 1) & 0xaaaaaaaa);v = ((v >> 2) & 0x33333333) | ((v << 2) & 0xcccccccc);v = ((v >> 4) & 0x0f0f0f0f) | ((v << 4) & 0xf0f0f0f0);v = ((v >> 8) & 0x00ff00ff) | ((v << 8) & 0xff00ff00);v = ((v >> 16) & 0x0000ffff) | ((v << 16) & 0xffff0000);return v; }


?

對char型數據處理:

unsigned char Bit_Reverse(unsigned char ch) {ch = (ch &0x55) <<1| (ch >>1) &0x55;ch = (ch &0x33) <<2| (ch >>2) &0x33;ch = (ch &0x0F) <<4| (ch >>4) &0x0F;return ch; }


?

問題三:給定一個數x,求它的二進制表示中有多少個1。

int cnt(unsigned int x) {x = x - ((x>>1)&0x55555555);x = (x & 0x33333333) + ((x>>2)&0x33333333);x = (x + (x>>4)) & 0x0f0f0f0f;x = (x + (x>>8));x = (x + (x>>16));return x&0x3f; }


?

總結

以上是生活随笔為你收集整理的二进制位交换,反转,与统计1的个数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。