c語言中位或怎麼計算,c++中位運算

本文目錄一覽:

c語言里的按位或是怎麼算的?

有一個常識需求了解一下。整型數在內存中是以補碼形式表示的,如下式:

15 = 00001111

-9 = 11110111‬

—————————–

11111111 = (-1)

|是把15和-9兩個補碼按位作「或」運算,結果是一個全1的數(也是補碼形式),從補碼知識就知道這個數是-1

C語言中什麼是按位或運算

位運算是在二進制層面上進行的運算

位或就是在兩個二進制上進行按位的或運算

像普通的邏輯運算一樣 兩個里有一個為真就返回真(邏輯真 就是1 邏輯假就是0)

比如兩個十進制數 5 和 3 進行位或運算

把他們轉換為二進制

5的二進制是 0101

3的二進制是 0011

他們按位或的結果是0111 轉換到十進制就是0+4+2+1 是7

C語言中位運算是怎麼樣的?

就是對一個X進制數對應在內存中存放為二進制形式的數碼,進行二進制的位的操作後,得到原進制數值。

位操作有:與、或I、異^、左移、右移。

根據這些符號所代表的操作規則來計算一個數的二進制。

C語言 位運算

###位運算的邏輯:

1:(位與)運算符():雙目操作符,當兩個位進行相與時,只有兩者都為「1」時結果才為「1」(即:全真為真,一假為假),運算規則如下:

左運算量                        右運算量                        運算結果

    0                                    0                     =                    0

    0                                     1                    =                    0

    1                                      0                   =                     0

    1                                       1                  =                     1

運算:

例:

#include  stdio.h

int main(int     argc,char    *crgv[]){

    unsigned            char    x=0156,    y=0xaf,   z;

z=xy;

printf(“%d”,z)

}

結果為:0x2e

運算過程:0156(8進制)==0000 0110 1110(2進制);

進行                                          (位與運算)

                    0xaf(16進制)     ==0000 1010    1111(2進制);

結果:0000    0010    1110(2進制)==0x2e(十六進制);

2:位或運算符(|):

雙目操作符,當兩個 位  進行相或時,兩者中只要有一方為「1」,結果就為「1」(即:一真為真,兩假為假),運算規則如下:

    左運算量                            右運算量                           (|) 運算結果

            0                    |                     0                        =                            0

            1                    |                    1                        =                            1

            0                    |                    1                    =                                1

            1                    |                     1                    =                               1

例:

#include stdio.h

int main(int argv,char  *argc[]){

unsigned char x=027,y=0x75;

z=x|y;

}

運行過程:

027(8進制)=0001   0111(2進制)

進行                    |(位或運算)

0x75(16進制)=0111    0101(2進制)

結果:0111   0111(2進制)=0x77(16進制)

3.異或運算(^):

    當兩個位進行異或時,只要兩者相同,結果為「0」,否者結果為「1」,(即:同假異真)運算規則如下:

左運算量                            右運算量                           (^) 運算結果

            0                    ^                    0                        =                            0

            1                    ^                    1                         =                            0

            0                    ^                    1                          =                            1

            1                    ^                    0                          =                             1

例:

#include

int main(int argv,char  *argc[]){

unsigned(無符號)     char    x=25,y=0263,z;

z=x^y;

printf(“%d\n”,z);

}

運算過程:

25(十進制)=0001    1001(二進制)

運算                    ^(異或運算)

0263(8進制)=1011    0011(二進制)

結果:1010     1010(二進制)=0252(8進制)

4:移位操作符(「」   或   “”):位移位運算的一般形式:運算量運算符表達式;

運算量必須為整型結果數值:

運算符為左移位()或 右移位()運算;

表達式也必須為整型結果數值;

移位操作就是把一個數值左移或右移若干位;假如左移n位,原來值最左邊的n位數被丟掉,右邊n衛補「0」 ;右移操作就是和左移操作移動方向相反;

符號位的處理方法:

(1):邏輯移位,不考慮符號問題,原數值右移n位後,左邊空出的n歌位置,用0填充;

(2):算術移位,原來值進行了右移操作後,需要保證符號位不變,因此,右移n位後,左邊空出的n個位置,用原數值的符號位填充。原來若是負數,則符號位為「1」,填充的位也是「1」;原來若是正數,則符號位為「0」,填充的位也是「0」,這樣保證移位後的數據與原數正負相同;

例:「1000   1001」將其右移兩位,邏輯移位的結果為「0010  0010」,算術移位為:「1110  0010」;

將其左移兩位,邏輯移位和算術移位的結果為:「0010  0100」;

(3)***補充:特定位清零(由「1」變成「0」)用 位與  操作;特定位變「1」(由「0」變成「1」)用  位或操作;

例:

a、請把0xd5的第2位進行清零操作

0xd5=1101 0101=1101 0001

    1111 1011

    ~0000 0100

    =0000 00012

  ~(0x012)0xd5

b、請把0xed的第3位進行清零操作

0xed=1110 1101=1110 0101

    1111 0111

    ~

    0000 1000

=    0000 00013

    ~(0x013)0xed

c、請把0x7d的第2-4位進行清零

0x7d=0111 1101=0110 0001

    1110 0011

    ~

    0001 1100

=

    0000 01112

~(0x07)0x7d

d、請把0x7d的第2位和第3位進行清零

0x7d=0111 1101=0111 0001

    1111 0011

~

    0000 1100

    0000 00112

~(0x032)0x7d

e、請把0xc7的第4位進行置1

0xc7=1100 0111=1101 0111

    0001 0000

    =0000 00014

=~(0x014)|0xc7

f、請把0x87的第3位進行置1 

0x87=1000 0111=1000 1111

    0000 1000

~(0x013)|0x87

g、請把0xc7的第3—5位置1

0xc7=1100 0111=1111 1111

    0011 1000

    0000 01113

~(0x073)|0x87

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/307280.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-02 18:06
下一篇 2025-01-02 18:06

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論