c語言中18怎麼算?是按位異或運算子

2021-03-07 00:59:44 字數 4920 閱讀 5561

1樓:匿名使用者

1和8都是int型,且都是正整數,記憶體中原碼形式儲存

1的原碼是00000000 00000000 00000000 0000001

8的原碼是00000000 00000000 00000000 0001000

按位異或,顧名思義是對應的二進位制位計算,口訣相同0,相異為1.就是對應的二進位制位,相同的話該二進位制位計算出來是0,不同的話計算出來才是1

舉例:0

^ 0-----

0***************1^1

---------

0************0^1

------------

1**************************************

所以00000000 00000000 00000000 0000001

^00000000 00000000 00000000 0001000

00000000 00000000 00000000 0001001

這個二進位制數按照原碼解釋,對應9

所以結果是9

2樓:匿名使用者

先把十進位制的1和8轉換成二進位制,然後進行位運算之後再把結果轉換成十進位制就ok了。

1 : 0000 0001

^8 :0000 1000

=0000 1001 也就是十進位制的 8 + 1 = 9

c語言中「按位運算子」是什麼意思?

3樓:匿名使用者

一、位運算子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<<4 指把a的各二進位向左移動4位。

如a=00000011(十進位制3),左移4位後為00110000(十進位制48)。6. 右移運算 右移運算子「>>」是雙目運算子。

其功能是把「>> 」左邊的運算數的各二進位全部右移若干位,「>>」右邊的數指定移動的位數。

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

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

main()

請再看一例!

main()

位域有些資訊在儲存時,並不需要占用乙個完整的位元組, 而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態, 用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為「位域」或「位段」。

所謂「位域」是把乙個位元組中的二進位劃分為幾個不同的區域, 並說明每個區域的位數。每個域有乙個網域名稱,允許在程式中按網域名稱進行操作。 這樣就可以把幾個不同的物件用乙個位元組的二進位制位域來表示。

一、位域的定義和位域變數的說明位域定義與結構定義相仿,其形式為:

struct 位域結構名

;其中位域列表的形式為: 型別說明符 位網域名稱:位域長度

例如:struct bs

;位域變數的說明與結構變數說明的方式相同。 可採用先定義後說明,同時定義說明或者直接說明這三種方式。例如:

struct bs

data;

說明data為bs變數,共佔兩個位元組。其中位域a佔8位,位域b佔2位,位域c佔6位。對於位域的定義尚有以下幾點說明:

1. 乙個位域必須儲存在同乙個位元組中,不能跨兩個位元組。如乙個位元組所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:

struct bs

在這個位域定義中,a佔第一位元組的4位,後4位填0表示不使用,b從第二位元組開始,占用4位,c占用4位。

2. 由於位域不允許跨兩個位元組,因此位域的長度不能大於乙個位元組的長度,也就是說不能超過8位二進位。

3. 位域可以無位網域名稱,這時它只用來作填充或調整位置。無名的位域是不能使用的。例如:

struct k

;從以上分析可以看出,位域在本質上就是一種結構型別, 不過其成員是按二進位分配的。

二、位域的使用位域的使用和結構成員的使用相同,其一般形式為: 位域變數名·位網域名稱 位域允許用各種格式輸出。

main() bit,*pbit;

bit.a=1;

bit.b=7;

bit.c=15;

printf("%d,%d,%d\n",bit.a,bit.b,bit.c);

pbit=&bit;

pbit->a=0;

pbit->b&=3;

pbit->c|=1;

printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c);

}上例程式中定義了位域結構bs,三個位域為a,b,c。說明了bs型別的變數bit和指向bs型別的指標變數pbit。這表示位域也是可以使用指標的。

程式的9、10、11三行分別給三個位域賦值。( 應注意賦值不能超過該位域的允許範圍)程式第12行以整型量格式輸出三個域的內容。第13行把位域變數bit的位址送給指標變數pbit。

第14行用指標方式給位域a重新賦值,賦為0。第15行使用了復合的位運算子"&=", 該行相當於: pbit->b=pbit->b&3位域b中原有值為7,與3作按位與運算的結果為3(111&011=011,十進位制值為3)。

同樣,程式第16行中使用了復合位運算"|=", 相當於: pbit->c=pbit->c|1其結果為15。程式第17行用指標方式輸出了這三個域的值。

型別定義符typedef

c語言不僅提供了豐富的資料型別,而且還允許由使用者自己定義型別說明符,也就是說允許由使用者為資料型別取「別名」。 型別定義符typedef即可用來完成此功能。例如,有整型量a,b,其說明如下:

int aa,b; 其中int是整型變數的型別說明符。int的完整寫法為integer,

為了增加程式的可讀性,可把整型說明符用typedef定義為: typedef int integer 這以後就可用integer來代替int作整型變數的型別說明了。 例如:

integer a,b;它等效於: int a,b; 用typedef定義陣列、指標、結構等型別將帶來很大的方便,不僅使程式書寫簡單而且使意義更為明確,因而增強了可讀性。例如:

typedef char name[20]; 表示name是字元陣列型別,陣列長度為20。

然後可用name 說明變數,如: name a1,a2,s1,s2;完全等效於: char a1[20],a2[20],s1[20],s2[20]

又如:typedef struct stu stu;

定義stu表示stu的結構型別,然後可用stu來說明結構變數: stu body1,body2;

typedef定義的一般形式為: typedef 原型別名 新型別名 其中原型別名中含有定義部分,新型別名一般用大寫表示, 以

便於區別。在有時也可用巨集定義來代替typedef的功能,但是巨集定義是由預處理完成的,而typedef則是在編譯時完成的,後者更為靈活方便。

4樓:匿名使用者

乙個位元組有 8位 也就是有乙個8位的2進製數,比如 0000 0001 表示的是1 ,0111 1111 表示127,而位運算 實際就是 2進製的運算 & 按位與 比如 3&7 意思是 0000 0011位與 0000 0111,結果是 3也就是0000 0011。意思是如果2個數字同一為一,有0為0。

| 按位或 比如 3|7 意思是 0000 0011位或 0000 0111, 結果是 7也就是0000 0111.意思是2個數字對比有一為一,同0為0.

^ 按位異或 比如 3^7 結果就是4 0000 0100, 就是說 2個數 每一位數字不同則為1相同則為 0

~ 取反 這個意思是 把每一位上的數字取反 為0則變為1 為1則變為0 如 ~3。

<< 左移 表示把這個數字整體 向左移動多少位 如 1<<2,表示把1向左移動2位 也就是說把 0000 0001 向左移動2位 就是 0000 0100. 也就是說1變成了100。

>> 右移 就是把這個數的 末尾多少位 去掉 如 17>>3 表示 0001 0001 的最後3位去掉 就變成了 0000 0010

c語言中怎樣才算是合法識別符號,C語言合法識別符號有哪些

c語言規定,識別符號以字母或下劃線開頭,後跟若干字母,下劃線或數字,大小寫字母組成的識別符號是不同的,識別符號的長度沒有限制.例如,以下識別符號是合法的 a,x,x3,book 1,sum5.以下識別符號是不合法的 3s,s t,3x,bowy 1 新局面耐粗 在計算機高階語言中,用來對變數 符號常...

c語言中string怎麼用啊,C語言中有string嗎?

用於輸入輸出的字串函式,在使用前應包含標頭檔案 stdio.h 使用其它字串函式則應包含標頭檔案 string.h c語言幾乎是現在所有高校必須學的科目之一,現在軟體業的發展急需c語言天才來進行開發。c語言提供了豐富的字串處理函式,大致可分為字串的輸入 輸出 合併 修改 比較 轉換 複製 搜尋幾類。...

c語言中邏輯或的豎線怎麼打啊,C語言中邏輯或的 豎線怎麼打啊

千鋒教育 同時按鍵盤上的這兩個鍵 c語言適用範圍大 適合於多種作業系統,如windows linux dos unix等等 也適用於多種機型。c語言對編寫需要硬體進行操作的場合,優於其它高階語言,有一些大型應用軟體也是用c語言編寫的。 塵世間的菜鳥 shift鍵加 這個鍵,平時就是 的這個,就可以打...