您好,登錄后才能下訂單哦!
本篇內容主要講解“C語言位操作方法有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言位操作方法有哪些”吧!
位操作
位操作是程序設計中對位模式按位或二進制數的一元和二元操作. 在許多古老的微處理器上, 位運算
比加減運算略快, 通常位運算比乘除法運算要快很多. 在現代架構中, 情況并非如此:位運算的運算速度通常
與加法運算相同(仍然快于乘法運算)。
位運算符
取反(~)是一元運算符, 對一個二進制數的每一位執行邏輯反操作。使數字1成為0, 0成為1。
按位或(|) 處理兩個長度相同的二進制數,兩個相應的二進位中只要有一個為1,該位的結果值為1。
按位異或(^)是對等長二進制模式按位或二進制數的每一位執行邏輯異按位或操作,操作的結果是如果某位不同則該位為1,否則該位為0。
按位與(&)處理兩個長度相同的二進制數,兩個相應的二進位都為1,該位的結果值才為1,否則為0。
移位
移位是一個二元運算符,用來將一個二進制數中的每一位全部都向一個方向移動指定位,溢出的部分將被舍棄,而空缺的部分填入一定的值。在類C語言中,左移使用兩個小于符號"<<"表示,右移使用兩個大于符號">>"表示。
邏輯移位(不管是左移位還是右移位) 都是空缺處補0。
算術移位 要保證符號位的不改變(邏輯左移位補0, 邏輯右移位看符號位)。
例如:110110011是-10110011前面的第一個1是符號位
那么110110011右移一位應該是111011001。
下面是一些位運算的簡單編程題
不用額外變量交換兩個整數的值
#include<iostream> using namespace std; int fun1(int a,int b) { int tmp=a-b; tmp>>=(sizeof(int)*4-1); if(tmp) return b; return a; } int main() { int a=-134,b=98; cout<<"max:"<<fun1(a,b)<<endl; return 0; }
2. 不用任何比較判斷找出兩個數中較大的數
#include<iostream> using namespace std; void fun2(int &a,int &b) { a=a+b; b=a-b; a=a-b; } int main() { int a=-134,b=98; fun2(a,b); cout<<"a:"<<a<<", b:"<<b<<endl; return 0; }
3. 整數的二進制表達式中的1的個數
#include<iostream> using namespace std; int fun3(int a) { int tmp,count=0; for(int i=1;i<32;a>>=1,++i) { if(a&1==1) count++; } return count; } int main() { fun4(); cout<<fun3(a)<<endl; return 0; }
4. 給定一個整數數組ar, 其中只有一個數出現了奇數次數,其他的數都是偶數詞,打印這個數。
#include<iostream> using namespace std; int fun4(int *ar,int n) { int tmp=0; for(int i=0;i<n;++i) tmp^=ar[i]; return tmp; } int main() { int ar[]={1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,2}; int n=sizeof(ar)/sizeof(int); cout<<"value is :"<<fun4(ar,n)<<endl; return 0; }
到此,相信大家對“C語言位操作方法有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。