c語言符位計算,c語言的位運算符號

本文目錄一覽:

c語言位運算是什麼?

運算:C語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程序設計語言。

在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。

當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則就會顯得十分重要。

運算符號:

比較特別的是,比特右移()運算符可以是算術(左端補最高有效位)或是邏輯(左端補0)位移。

例如,將11100011右移3比特,算術右移後成為11111100,邏輯右移則為00011100。因算術比特右移較適於處理帶負號整數,所以幾乎所有的編譯器都是算術比特右移。

運算符的優先級從高到低大致是:單目運算符、算術運算符、關係運算符、邏輯運算符、條件運算符、賦值運算符(=)和逗號運算符。

c語言的按位運算符怎麼操作!?

位運算

在很多系統程序中常要求在位(bit)一級進行運算或處理。C語言提供了位運算的功能,

這使得C語言也能像彙編語言一樣用來編寫系統程序。

一、位運算符C語言提供了六種位運算符:

按位與

|

按位或

^

按位異或

~

取反

左移

右移

1.

按位與運算

按位與運算符””是雙目運算符。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1

,否則為0。參與運算的數以補碼方式出現。

例如:95可寫算式如下:

00001001

(9的二進制補碼)00000101

(5的二進制補碼)

00000001

(1的二進制補碼)可見95=1。

按位與運算通常用來對某些位清0或保留某些位。例如把a

的高八位清

保留低八位,

可作

a255

運算

(

255

的二進制數為0000000011111111)。

main(){

int

a=9,b=5,c;

c=ab;

printf(“a=%d\nb=%d\nc=%d\n”,a,b,c);

}

2.

按位或運算

按位或運算符“|”是雙目運算符。其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。

例如:9|5可寫算式如下:

00001001|00000101

00001101

(十進制為13)可見9|5=13

main(){

int

a=9,b=5,c;

c=a|b;

printf(“a=%d\nb=%d\nc=%d\n”,a,b,c);

}

3.

按位異或運算

按位異或運算符“^”是雙目運算符。其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數仍以補碼出現,例如9^5可寫成算式如下:

00001001^00000101

00001100

(十進制為12)

main(){

int

a=9;

a=a^15;

printf(“a=%d\n”,a);

}

4.

求反運算

求反運算符~為單目運算符,具有右結合性。

其功能是對參與運算的數的各二進位按位求反。例如~9的運算為:

~(0000000000001001)結果為:1111111111110110

5.

左移運算

左移運算符“”是雙目運算符。其功能把“

”左邊的運算數的各二進位全部左移若干位,由“”右邊的數指定移動的位數,

高位丟棄,低位補0。例如:

a4

指把a的各二進位向左移動4位。如a=00000011(十進制3),左移4位後為00110000(十進制48)。6.

右移運算右移運算符“”是雙目運算符。其功能是把“

”左邊的運算數的各二進位全部右移若干位,“”右邊的數指定移動的位數。

例如:設

a=15,a2

表示把000001111右移為00000011(十進制3)。應該說明的是,對於有符號數,在右移時,符號位將隨同移動。當為正數時,

最高位補0,而為負數時,符號位為1,最高位是補0或是補1

取決於編譯系統的規定。Turbo

C和很多系統規定為補1。

main(){

unsigned

a,b;

printf(“input

a

number:

“);

scanf(“%d”,a);

b=a5;

b=b15;

printf(“a=%d\tb=%d\n”,a,b);

}

請再看一例!

main(){

char

a=’a’,b=’b’;

int

p,c,d;

p=a;

p=(p8)|b;

d=p0xff;

c=(p0xff00)8;

printf(“a=%d\nb=%d\nc=%d\nd=%d\n”,a,b,c,d);

}

c語言之中的位運算符是怎麼運算的呢?

所謂位,就是指將一個或兩個數轉換成二進制按每一位進行運算

位與

運算規則

0 0 = 0

0 1 = 0

1 0 = 0

1 1 = 1

|位或

運算規則

0 | 0 = 0

0 | 1 = 1

1 | 0 = 1

1 | 1 = 1

^異或

運算規則

0 ^ 0 = 0

0 ^ 1 = 1

1 ^ 0 = 1

1 ^ 1 = 0

~取反

運算規則

將0變1

將1變0

左移

運算規則

左移n位,相當於給一個十進制數乘以2的n次方

右移

運算規則

右移n位,相當於給一個十進制數除以2的n次方

前三個是兩個二進制數之間的運算

後三個是一個二進制數自身的運算

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

c語言的位符號 都是怎麼運算的啊

C語言提供的位運算符列表:

運算符

含義

描述

按位與

如果兩個相應的二進制位都為1,則該位的結果值為1,否則為0

|

按位或

兩個相應的二進制位中只要有一個為1,該位的結果值為1

^

按位異或

若參加運算的兩個二進制位值相同則為0,否則為1

~

取反

~是一元運算符,用來對一個二進制數按位取反,即將0變1,將1變0

左移

用來將一個數的各二進制位全部左移N位,右補0

右移

將一個數的各二進制位右移N位,移到右端的低位被捨棄,對於無符號數,高位補0

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:08
下一篇 2024-12-12 13:08

相關推薦

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

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

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

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

    編程 2025-04-29
  • Python符號定義和使用方法

    本文將從多個方面介紹Python符號的定義和使用方法,涉及注釋、變量、運算符、條件語句和循環等多個方面。 一、注釋 1、單行注釋 # 這是一條單行注釋 2、多行注釋 “”” 這是一…

    編程 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

發表回復

登錄後才能評論