C語言複習2之位操作

來源:互聯網
上載者:User

標籤:位操作

位操作

        位操作是程式設計中對位元模式按位或位元的一元和二元操作. 在許多古老的微處理器上, 位元運算

比加減運算略快, 通常位元運算比乘除法運算要快很多. 在現代架構中, 情況並非如此:位元運算的運算速度通常

與加法運算相同(仍然快於乘法運算)。

 位元運算符

     取反(~)是一元運算子, 對一個位元的每一位執行邏輯反操作。使數字1成為0, 0成為1。

      按位或(|) 處理兩個長度相同的位元,兩個相應的二進位中只要有一個為1,該位的結果值為1。

     按位異或(^)是對等長二進位模式按位或位元的每一位執行邏輯異按位或操作,操作的結果是如果某位不同則該位為1,否則該位為0。

       按位與(&)處理兩個長度相同的位元,兩個相應的二進位都為1,該位的結果值才為1,否則為0。

 移位

      移位是一個二元運算子,用來將一個位元中的每一位全部都向一個方向移動指定位,溢出的部分將被捨棄,而空缺的部分填入一定的值。在類C語言中,左移使用兩個小於符號"<<"表示,右移使用兩個大於符號">>"表示。

      邏輯移位(不管是左移位還是右移位) 都是空缺處補0。

       算術移位  要保證符號位的不改變(邏輯左移位補0, 邏輯右移位看符號位)。

        例如:110110011是-10110011前面的第一個1是符號位

                    那麼110110011右移一位應該是111011001。

下面是一些位元運算的簡單編程題

  1. 不用額外變數交換兩個整數的值

#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;}


本文出自 “做自己” 部落格,請務必保留此出處http://ljl1463.blog.51cto.com/13187791/1954837

C語言複習2之位操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.