——個人筆記
通常我們交換兩個變數都會用乙個中間值來儲存然後交換,用int來舉例:
int a = 1, b = 2;
int temp;//中間值
temp=a,a=b,b=temp;
這樣就很簡單,我們也可以用差值法
int a = 1, b = 2;
a=a+b;
b=a-b;
a=a-b;
是不是感覺很有意思?其實這兩種還是很容易就想到的,如果要你直接用二進位制的方式來進行交換呢?下面看**:
//交換a、b二進位制方式
int a = 1, b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
^
這個是按位異或,其實很容易理解。按位異或有乙個特性,就是兩個進行按位異或,看其中乙個的時候遇到0不變遇到1變。比如我們a為1100,b為1111。我們以b來看,a的第一二位為1,那麼b的第一二位變,a的第三四位為0,那麼b的第三四位不變,得到結果為0011。那麼我們就可以理解這個怎麼交換了,先把a和b二進位制相同的位變為0、不同的位變為1。那麼如果兩個數交換,二進位制裡,位數相同的就不變,位數不同就變這樣就能變為另外乙個數了(和異或的特性一樣)。第一次的a^b
就是找出哪些位數相同哪些不同。然後第二次a^b
就是把b變為a,第三次a^b
就是把a變為b(因為經過第二次之後b的值就是原來a的值) 檢視兩個int數的二進位制有幾位不同
題目 檢視兩個int 32位 數的二進位制有幾位不同。分析 要理解該題目的意思,就要明白c語言中關於位的一些操作符。1 按位與操作符,從低位到高位對兩個數的每位進行與操作,如1001 1101 1001,都為1則取1 2 按位或操作符,有乙個是1就取1 3 異或,不同則取1 4 非操作符,用來對乙個...
計算兩個整數的二進位制中有幾個二進位制不同
演算法思想 這裡用到位運算,給定兩個初值 1 定義乙個計數器count在後面用來計算不同的二進位制的個數 2 定義乙個變數i,i從0開始,迴圈32次,因為32位二進位制,採用乙個for迴圈 3 a和b的二進位制形式每次右移一次,右移出的那個二進位制與1相與,如果結果相同則說明兩個二進位制相同,反之相...
利用兩個鍵進行二進位制程式設計
前段時間寫的乙個二進位制打字程式,之所以弄這個主要是因為我的乙個同學說過要是鍵盤上只有兩個鍵 0或1 那編起程式來那該多累啊。後來我覺得好玩,就隨便編了乙個。主要實現的效果 使用者利用數字鍵的 1 2 1 對應二進位制值 1 2 對應二進位制值 0 輸入7位二進位制數字 不顯示在螢幕上 輸完後,程式...