C語言問題 位運算,C語言中的位運算有什麼優點?

2022-12-16 04:05:20 字數 5579 閱讀 4607

1樓:橋半

char型別是以ascii碼儲存的,內部形式等同於一個unsigned 8位的整數。

後面的移位操作只保留了第n位的值。

由於'0'-'9'在ascii碼裡是連續的,把要輸出的一位數值加上'0'其實就得到了該數的字元表示。

2樓:皇冰洪忠

以行為單位把字串中所有字元的ascii值左移4位,如果左移後,其字元的ascii值小於等於32或大於100,則原字元保持不變,否則就把左移後的字元ascii值再加上原字元ascii值,得到的新字元仍存入原字串對應的位置上。

英文字母的ascii碼範圍是65~122,空格忘了是30還是33,回車是13換行是10,請問你文章字元的ascii左移4位(左移時會隱式轉換成整形,相當於乘16卻不會溢位)後還在32~100的區間?

c語言中的位運算有什麼優點?

3樓:匿名使用者

很多高階的動態規劃題目或者一些基礎的運算往往需要較高的執行效率和較低的空間需求,或者需要表示一些狀態集合,而位運算剛好能滿足這一切。很多的時候,恰當的位運算使用也能使程式變得更加簡潔和優美。

c語言的位運算在實際操作中有什麼用

4樓:匿名使用者

這個就要涉及計算機組成原理,也就是數字在計算機中具體如何表示了,比如9×4=36,9在計算機中用2進製表示,1001,就是這個1001連續加上4次,但是如果移位的話就僅僅移兩個位,1001向左移位變成100100就是36的二進位制碼了,比乘法要簡單得多。

5樓:匿名使用者

有用的,比如一個子程式用一個整數表示當前狀態(節約) 比如這個變數是 int flag,這個二進位制最後一位1表示有房子,0表示沒有,倒數第2位1表示男的0表示女的。然後有很多種狀態合一起。

這個時候要把一個人設成有房子,只要執行 flag |=1, 要設定成男的只要執行flag|=1<<1;

判斷男女是否有房也直接用 flag & 1 ==1 這樣另外在一些運算密集的場景, 位運算比直接乘除法要快,比如做二分查詢經常要除以2, 執行除法多麻煩, 移位1位多容易啊。

c語言中可以進行位運算的資料型別有什麼?

6樓:匿名使用者

float 和double不可以,剩下的幾個都行。

7樓:李

只能用於整型運算元,即char,short,int,long型別。

c語言位運算

8樓:

~取反,0取反是1,1取反是0

《是左移,比如1《次方。

>>右移,類似左移,數值大小除以2的n次方&按位與,1與任意數等於任意數本身,0與任意數等於0,即1&x=x,0&x=0

|按位或,x|y中只要有一個1則結果為1

^按位異或,x^y相等則為0,不等則為1

所有數值必須轉換為二進位制數才能位運算,每一位數相對應運算。

9樓:與鯉

按位與 | 按位或 ^

按位異或 ~ 取反。

《左移 >>右移<<

1. 按位與運算。按位與運算子"&"是雙目運算子。

其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。

2. 按位或運算。按位或運算子「|」是雙目運算子。

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

例如:9|5可寫算式如下: 00001001|00000101 00001101 (十進位制為13)可見9|5=13 main()

3. 按位異或運算。按位異或運算子「^」是雙目運算子。

其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數仍以補碼出現,例如9^5可寫成算式如下: 00001001^00000101 00001100 (十進位制為12) main()。

5. 左移運算。左移運算子「《是雙目運算子。

其功能把「《左邊的運算數的各二進位全部左移若干位,由「《右邊的數指定移動的位數, 高位丟棄,低位補0。例如: a<<4 指把a的各二進位向左移動4位。

如a=00000011(十進位制3),左移4位後為00110000(十進位制48)。

10樓:匿名使用者

p為整型變數,通過前面的運算,高8位為『a』(97),低八位為『b』(98);

c=(p & 0xff00) >8;

先執行括號內表示式,再進行右移位運算,最後賦值給cp & 0xff00 //低8位置0

>> 8 ,低8位移出,高8位到低8位,因此 c = a' ,按整型輸出為97

11樓:

p=a; /p=97

p=(p<<8)|b; /97的16進位制是0x0000 0061,左移8位後變為0x0000 6100,b=98,對應的16進位制是0x0000 0062

//進行位或運算後,p變為0x0000 6162c=(p&0xff00)>>8; /0x0000 6162 & 0x0000 ff00=0x0000 6100,然後右移八位,變成了0x0000 0061所以c=0x0000 0061,即10進位制97了。

12樓:匿名使用者

~是取反符號,比如數字2的二進位制數十10 取反後是01

<< 是左移與右移符號,如 4<<1 相當於100左移一位 1000 得到8相反用4>>1就得到2

&符號是位與運算子,2個數做與運算,都是1時得到1,其他為0 ,如二進位制數1010 和1001做運算最後得到1000

|是位或運算,2個數運算只要有一個是1就得到1,如二進位制數1010和1001得到進過1011

^異或運算,相同為0不同為1 如二進位制數 1010和1001 得到0011

13樓:匿名使用者

char 和 int 可以大小相同 都是16個位元組初學的話,你要知道『a'可以直接看成數字97,『b'是98知識點不多 左移 補0 | 運算 0-16進位制的轉換。

剩下的你要把這個過程拆分開來,一次一步的算,就簡單很多。

14樓:匿名使用者

a&b 相同位的兩個數字都為1,則為1;若有一個不為1,則為0。

a|b 相同位只要一個為1即為1。

a ^ b 相同位不同則為1,相同則為0。

~a 取反。

a >b右移b位。

15樓:匿名使用者

大幾 不會是剛學吧 我大一 沒你這麼遠 每個 字母都代表一個數 a好像是97吧。

16樓:柯夢月京驕

先把要進行運算的兩個數轉換成二進位制:

下面是「按位與」:-就是要兩個都是真才是真(1)010100

下面是「按位或」:-就是一個是真就可以了(1)010100

10---這樣看起來符合我們的運算習慣。

17樓:貫梓夫昂雄

c語言是為描述系統而設計的,它的第一個應用就是unix作業系統的設計,因此必須具有低階語言的特點。指標運算和位運算就是其代表。計算機中的資訊以及控制訊號均是以二進位制碼的0、1的形式儲存和處理的。

每一個0或1稱為一個「位」(bit),8位構成一個位元組(byte)。在記憶體中,每一個位元組均有一個編號,稱為記憶體地址。

在以前的各章節中,都是將一個位元組(如字元型)和若干位元組(如整型、實型等)中的內容作為一個整體進行處理的(賦值、運算、i/o操作)。

位運算則是針對這些位元組中的若干位進行操作。這在系統軟體設計中和自動控制中是十分有用的。

18樓:滑映寒愈霽

&和|的關係。

(1)若a=true

b=false

則:a&&b=false

a||b=true

(2)若a=false

a=true

a&&b=false

a||b=true

(3)若a=true

b=true

a&&b=true

a||b=true

(4)若a=false

b=false

a&&b=false

a||b=false

仔細想一下就明白了!

19樓:圭方方鬱方

就是二進位制邏輯運算。比如:

inta=1,b=3;

a,b表示成2進位制數:a=

0001b=

0011a|

b=0000

0011a&

b=0000

20樓:匿名使用者

一、位運算子c語言提供了六種位運算子:

& 按位與。

| 按位或。

^ 按位異或。

~ 取反。<<左移。

>> 右移。

1. 按位與運算 按位與運算子"&"是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。

只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。

例如:9&5可寫算式如下: 00001001 (9的二進位制補碼)&00000101 (5的二進位制補碼) 00000001 (1的二進位制補碼)可見9&5=1。

按位與運算通常用來對某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 運算 ( 255 的二進位制數為0000000011111111)。

main()

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

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

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

main()

3. 按位異或運算 按位異或運算子「^」是雙目運算子。其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。

參與運算數仍以補碼出現,例如9^5可寫成算式如下: 00001001^00000101 00001100 (十進位制為12)

main()

4. 求反運算 求反運算子~為單目運算子,具有右結合性。 其功能是對參與運算的數的各二進位按位求反。

例如~9的運算為: ~0000000000001001)結果為:1111111111110110

5. 左移運算 左移運算子「《是雙目運算子。其功能把「《左邊的運算數的各二進位全部左移若干位,由「《右邊的數指定移動的位數,高位丟棄,低位補0。例如: a<>」是雙目運算子。其功能是把「>>左邊的運算數的各二進位全部右移若干位,「>右邊的數指定移動的位數。

例如:設 a=15,a>>2 表示把000001111右移為00000011(十進位制3)。 應該說明的是,對於有符號數,在右移時,符號位將隨同移動。

當為正數時, 最高位補0,而為負數時,符號位為1,最高位是補0或是補1 取決於編譯系統的規定。turbo c和很多系統規定為補1。

main()

請再看一例!

main()

21樓:匿名使用者

還是看書吧,有專門章節解釋位運算的。

c語言位運算的問題,C語言中的位運算有什麼優點?

的優先順序比 高,的優先順序也比 高,所以k i j 3 實為k i 專 j 3 屬i 013 00000000 00001011 0打頭的是八進位制 所以 i 11111111 11110100 j 0x13 00000000 00010011,j 3 00000000 00010011 3 00...

c語言中卻運算子如何使用,C語言中取反運算子如何使用

c語言經典例子之按位取反運算子 運算子 是邏輯非運算子 才是按位取反運算子。經過 運算後,回運算結果只答 有0或1 而經過 運算後,結果有多種,取決於運算元。下面通過例項來介紹這個運算子的使用方法 int a 10,b,c b a 運算後b 0,因為a不等於0 即為真 所以取非後等於0 為假 c a...

c語言中,運算順序是 算數運算 關係運算 邏輯運算 賦值運算嗎?為什麼070不算算數運算

首先,你確來認你的 運算子正自確使用了 bai麼?常量不可以 du 運算的 其次zhi,你要注意 在前和dao 在後的區別,在前的時候是先算這個 運算,然後取所有 運算的值並計算表示式,在後的時候正好相反,要先取所有 運算的值並計算表示式,然後才進行 運算,比如說 a b 要先算 b 前提是a的值非...