C語言位操作方法有哪些

本篇內(nèi)容主要講解“C語言位操作方法有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言位操作方法有哪些”吧!

創(chuàng)新互聯(lián)公司服務項目包括奉節(jié)網(wǎng)站建設、奉節(jié)網(wǎng)站制作、奉節(jié)網(wǎng)頁制作以及奉節(jié)網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,奉節(jié)網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到奉節(jié)省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

位操作

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

比加減運算略快, 通常位運算比乘除法運算要快很多. 在現(xiàn)代架構(gòu)中, 情況并非如此:位運算的運算速度通常

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

 位運算符

     取反(~)是一元運算符, 對一個二進制數(shù)的每一位執(zhí)行邏輯反操作。使數(shù)字1成為0, 0成為1。

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

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

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

 移位

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

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

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

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

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

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

  1. 不用額外變量交換兩個整數(shù)的值

#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. 不用任何比較判斷找出兩個數(shù)中較大的數(shù)

#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. 整數(shù)的二進制表達式中的1的個數(shù)

#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. 給定一個整數(shù)數(shù)組ar, 其中只有一個數(shù)出現(xiàn)了奇數(shù)次數(shù),其他的數(shù)都是偶數(shù)詞,打印這個數(shù)。

#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語言位操作方法有哪些”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

網(wǎng)站標題:C語言位操作方法有哪些
文章鏈接:http://bm7419.com/article46/iihjhg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設品牌網(wǎng)站制作、微信小程序、響應式網(wǎng)站、網(wǎng)站排名、App設計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化