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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

计算机中位运算的一些性质与技巧

發布時間:2025/3/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机中位运算的一些性质与技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、位運算總共有5總運算:

二、每種運算都有相應的性質:

三、位運算基礎上擴展的一些解法


在實際中,由于計算機采用的是二進制存儲,所以關于位運算的操作能夠實現并簡化很多復雜問題。

一、位運算總共有5總運算:

與(&)、或(|)、異或(^)、左移(<<)、右移(>>)。

二、每種運算都有相應的性質:

1.與:都真才真。任何數與0相與都為0,任何數與1相與都為其本身;

2.或:都假才假。任何數與0相或都為其本身,任何數與1相或都為1;

3.異或:任何數與1異或得到其相反數,任何數與0異或得到其本身,任何數與自身異或結果為0;

(1)交換律: A ^ B = B ^ A

(2)結合律: ( A ^ B ) ^ C = A ^ ( B ^ C )

(3)自反性: A ^ B ^ B = A (由結合律可推: A ^ B ^ B = A ^ ( B ^ B ) = A ^ 0 = A)

所以異或能完成數之間的交換以及排除偶次重復

//a與b的交換 a = a ^ b; // a = 3 ^ 7 b = a ^ b; // b = (3 ^ 7) ^ 7 = 3 ^ (7 ^ 7) = 3 完成b = a a = a ^ b; // a = (3 ^ 7) ^ (3 ^ 7 ^ 7) = (3 ^ 3) ^ (7 ^ 7) ^ 7 = 7 完成a = b // 常規方法:通過二次循環找出不重復的數字 for (...) {for (...) {...} }// 異或方法:將所有整數異或,出現偶數次的整數會被抵消,最終留下不重復整數。 int result = 0; for (int index = 0; index < numArray.length; index++) {result = result ^ numArray[index]; } return result;

4.左移與右移

效率比乘除高,但是要注意一點:

在二分法中,求中點的時候,不能(left+right)>>2;因為直接相加可能溢出,最好用下面的方式。

int left, right, mid; mid = left + (right - left)/2;

三、位運算基礎上擴展的一些解法

1.統計一個數中1的個數:

while(n){n = n&(n-1);++res; } return res;

比如兩個數的漢明距離,可以先異或再統計1的個數

class Solution { public:int hammingDistance(int x, int y) {//先異或得到結果n//統計結果n中1的個數 n與n-1位與一次能消除掉n最右邊的1int n = x^y;int res = 0;while(n){n = n&(n-1);++res;} return res;} };

?

總結

以上是生活随笔為你收集整理的计算机中位运算的一些性质与技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

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