『壹』 關於c語言:運算符的用法
a?b:c這個是條件表達式,也稱三目運算符,表示如果a為真,則表達式值為b,如果a為假,則表達式值為c。
條件表達式語法舉例說明如下:
if(a>b) {max=a} ; else {max=b};
可用條件表達式寫為
max=(a>b)?a:b;
執行該語句的語義是:如a>b為真,則把a賦予max,否則把b 賦予max。
(1)c語言六重運算符擴展閱讀
使用條件表達式的注意點:
1、條件運算符的運算優先順序低於關系運算符和算術運算符,但高於賦值符。
因此 max=(a>b)?a:b
可以去掉括弧而寫為 max=a>b?a:b
2、條件運算符?和:是一對運算符,不能分開單獨使用。
3、條件運算符的結合方向是自右至左。
例如: a>b?a:c>d?c:d 應理解為 a>b?a:(c>d?c:d)
『貳』 c語言多少運算符,一共多少個~~~
總共有很多。
但是常用的其實就幾個啦
1級(左結合)
( ) 圓括弧;[ ]下標運算符;->指向結構體成員運算符;. 結構體成員運算符。
2級(右結合)
「 ! 」邏輯非運算符;「 ~ 」按位取反運算符;「 ++ 」前綴增量運算符;「 -- 」前綴減量運算符;
「 - 」負號運算符;(類型)類型轉換運算符;「 * 」指針運算符;「 & 」地址運算符;
「sizeof 」 長度運算符。
3級(左結合)
「 * 」 乘法運算符;「 / 」 除法運算符;「 % 」 取余運算符。
4級(左結合)
「 + 」加法運算符;「 - 」減法運算符。
5級(左結合)
<< 左移運算符;>> 右移運算符。
6級(左結合)
<、<=、>、>=關系運算符。
7級(左結合)
「 == 」等於運算符;「 != 」不等於運算符。
8級(左結合)
「 & 」按位與運算符。
9級(左結合)
「 ∧ 」按位異或運算符。
10級(左結合)
「 | 」按位或運算符。
11級(左結合)
「&&」邏輯與運算符。
12級(左結合)
「 || 」邏輯或運算符。
13級(右結合)
? :條件運算符。
14級(右結合)
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算符。
15級(左結合)
「,」 逗號運算符。
『叄』 c語言中各個運算符代表什麼就是++ —— ==啥的
下面按優先順序列出了常用的每個運算符的名稱,如果還有需要具體化的請提問:
1級(左結合)
() 圓括弧;[]下標運算符;->指向結構體成員運算符;. 結構體成員運算符。
2級(右結合)
!邏輯非運算符;~按位取反運算符;++前綴增量運算符;--前綴減量運算符;+正號運算符;-負號運算符;(類型)類型轉換運算符;*指針運算符;&地址運算符;sizeof長度運算符。
3級(左結合)
*乘法運算符;/除法運算符;%取余運算符。
4級(左結合)
+加法運算符;-減法運算符。
5級(左結合)
<<左移運算符;>>右移運算符。
6級(左結合)
<、<=、>、>=關系運算符。
7級(左結合)
==等於運算符;!=不等於運算符。
8級(左結合)
&按位與運算符。
9級(左結合)
^按位異或運算符。
10級(左結合)
|按位或運算符。
11級(左結合)
&&邏輯與運算符。
12級(左結合)
||邏輯或運算符。
13級(右結合)
? :條件運算符。
14級(右結合)
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算符。
『肆』 位運算符的C語言的六種位運算符
&按位與|按位或^按位異或~取反<<左移>>右移 按位與運算符&是雙目運算符。 其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。
例如:9&5可寫算式如下: 00001001 (9的二進制補碼)&00000101 (5的二進制補碼) 00000001 (1的二進制補碼)可見9&5=1。 按位與運算通常用來對某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 運算 ( 255 的二進制數為11111111)。 main(){inta=9,b=5,c;c=a&b;printf(a=%d
b=%d
c=%d
,a,b,c);} 按位或運算符「|」是雙目運算符。 其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。
例如: 9|5可寫算式如下: 00001001|00000101=00001101(十進制為13)可見9|5=13 main(){inta=9,b=5,c;c=a|b;printf(a=%d
b=%d
c=%d
,a,b,c);} 按位異或運算符「^」是雙目運算符。 其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。
參與運算數仍以補碼出現。
例如 9^5可寫成算式如下: 00001001^00000101=00001100(十進制為12) main(){inta=9;a=a^15;printf(a=%d
,a);} 求反運算符~為單目運算符,具有右結合性。 其功能是對參與運算的數的各二進位按位求反。
例如 ~9的求反運算為: ~(1001)結果為: 0110 左移運算符「<<」是雙目運算符。左移n位就是乘以2的n次方。 其功能把「<<」左邊的運算數的各二進位全部左移若干位,由「<<」右邊的數指定移動的位數,高位丟棄,低位補0。
1)例: a<<4 指把a的各二進位向左移動4位。如a=00000011(十進制3),左移4位後為00110000(十進制48)。
2)例: int i = 1; i = i << 2; //把i里的值左移2位 也就是說,1的2進制是000...0001(這里1前面0的個數和int的位數有關,32位機器,gcc里有31個0),左移2位之後變成 000...0100,也就是10進制的4,所以說左移1位相當於乘以2,那麼左移n位就是乘以2的n次方了(有符號數不完全適用,因為左移有可能導致符號變化,下面解釋原因)
需要注意的一個問題是:int類型最左端的符號位和移位移出去的情況. 我們知道,int是有符號的整形數,最左端的1位是符號位,即0正1負,那麼移位的時候就會出現溢出, 例如: int i = 0x40000000; //16進制的40000000,為2進制的01000000...0000 i = i << 1; 那麼,i在左移1位之後就會變成0x80000000,也就是2進制的100000...0000,符號位被置1,其他位全是0,變成了int類型所能表示的最小值,32位的int這個值是,溢出.如果再接著把i左移1位會出現什麼情況呢?
在C語言中採用了丟棄最高位的處理方法,丟棄了1之後,i的值變成了0. 左移里一個比較特殊的情況是當左移的位數超過該數值類型的最大位數時,編譯器會用左移的位數去模類型的最大位數,然後按余數進行移位,如: int i = 1, j = 0x80000000; //設int為32位 i = i << 33; // 33 % 32 = 1 左移1位,i變成2 j = j << 33; // 33 % 32 = 1 左移1位,j變成0,最高位被丟棄 在用gcc編譯這段程序的時候編譯器會給出一個warning,說左移位數>=類型長度.那麼實際上i,j移動的就是1位,也就是33%32後的余數.在gcc下是這個規則,不同編譯器可能會不完全相同.
總之左移就是: 丟棄最高位,0補最低位 右移運算符「>>」是雙目運算符。右移n位就是除以2的n次方
其功能是把「>>」左邊的運算數的各二進位全部右移若干位,「>>」右邊的數指定移動的位數。
例如:設 a=15,a>>2 表示把00001111右移為00000011(十進制3)。 應該說明的是,對於有符號數,在右移時,符號位將隨同移動。當為正數時, 最高位補0,而為負數時,符號位為1,最高位是補0或是補1 取決於編譯系統的規定。Turbo C和很多系統規定為補1。
右移對符號位的處理和左移不同: 對於有符號整數來說,比如int類型,右移會保持符號位不變,
例如: int i = 0x80000000; i = i >> 1; //i的值不會變成0x40000000,而會變成0xc0000000 就是說,對於有符號數, 符號位向右移動後,正數的話補0,負數補1, 對於有符號數,在右移時,符號位將隨同移動: 當為正數時, 最高位補0, 而為負數時,符號位為1, 也就是匯編語言中的算術右移.同樣當移動的位數超過類型的長度時,會取余數,然後移動余數個位. 最高位是補0或是補1 取決於編譯系統的規定。Turbo C和很多系統規定為補1。 負數10100110 >>5(假設字長為8位),則得到的是 11111101 總之,在C中,左移是邏輯/算術左移(兩者完全相同),右移是算術右移,會保持符號位不變.實際應用中可以根據情況用左/右移做快速的乘/除運算,這樣會比循環效
率高很多. x>>1;//相當於x/=2x<<1;//相當於x*=2x>>2;//x/=4x<<2;//x*=4x>>3;//x/=8x<<3;//x*=8以此類推. 無符號: main(){unsigneda,b;printf(inputanumber:);scanf(%d,&a);b=a>>5;b=b&15;printf(a=%d b=%d
,a,b);}請再看一例! main(){chara='a',b='b';intp,c,d;p=a;p=(p<<8)|b;d=p&0xff;c=(p&0xff00)>>8;printf(a=%d
b=%d
c=%d
d=%d
,a,b,c,d);} 1. 使特定位翻轉 要使哪幾位翻轉就將與其進行∧運算的該幾位置為1即可。
2 與0相∧,保留原值.
3.交換兩個值,不用臨時變數. 我們可以在不用引入其他變數就可以實現變數值的交換 用異或操作可以實現: a = a^b; //
(1) b = a^b; //
(2) a = a^b; //
(3) 異或操作滿足結合律和交換律,且由異或操作的性質知道,對於任意一個整數a^a=0; 證:(第(2)步中的a) a = a^b =(將第(1)步中的b代入b) a^(a^b) = b; (第(3)步中的b)b =a^b = (將第(1)步中的b代入b,將第(2)步中的a代入a) a^b^a^a^b = a^a^a^b^b = a; 清零 A數中為1的位,B中相應位為0。然後使二者進行&運算,即可達到對A清零目的。
取一個數中某些指定位 取數A的某些位,把數B的某些位置1,就把數A的某些位與1按位與即可。
保留一位的方法 數A與數B進行&運算,數B在數A要保留的位1,其餘位為零。
判斷奇偶性 將變數 a的奇偶性。a與1做位與運算,若結果是1,則 a是奇數;將 a與1做位與運算,若結果是0,則 a是偶數。 判斷int型變數a是奇數還是偶數 a&1 = 0 偶數 a&1 = 1 奇數
取int型變數a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1
將int型變數a的第k位清0,即a=a&~(1<<k)
將int型變數a的第k位置1, 即a=a|(1<<k)
int型變數循環左移k次,即a=a<<k|a>>16-k (設sizeof(int)=16)
int型變數a循環右移k次,即a=a>>k|a<<16-k (設sizeof(int)=16)
整數的平均值
對於兩個整數x,y,如果用 (x+y)/2 求平均值,會產生溢出,因為 x+y 可能會大於INT_MAX,但是我們知道它們的平均值是肯定不會緋齙模?頤怯萌縵濾惴ǎ?/DIV> int average(int x, int y) //返回X,Y 的平均值 { return (x&y)+((x^y)>>1); }
判斷一個整數是不是2的冪,對於一個數 x >= 0,判斷他是不是2的冪 boolean power2(int x) { return ((x&(x-1))==0)&&(x!=0); }
不用temp交換兩個整數 void swap(int x , int y) { x ^= y; y ^= x; x ^= y; } php: $a ='dd'; $b = 'bb'; $a = $a ^ $b; $b = $a ^ $b;
$a = $a ^ $b; echo $a,' ', $b; 10 計算絕對值 int abs( int x ) { int y ; y = x >> 31 ; return (x^y)-y ; //or: (x+y)^y }
取模運算轉化成位運算 (在不產生溢出的情況下) a % (2^n) 等價於 a & (2^n - 1) 12 乘法運算轉化成位運算 (在不產生溢出的情況下) a * (2^n) 等價於 a<< n 13. 除法運算轉化成位運算 (在不產生溢出的情況下) a / (2^n) 等價於 a>> n 例: 12/8 == 12>>3 14 . a % 2 等價於 a & 1 15 if (x == a) x= b; else x= a; 等價於 x= a ^ b ^ x;
16 x 的 相反數 表示為 (~x+1)abc
『伍』 C語言運算符幾個
一個等號是賦值運算符,用於把等號右邊的結果賦值給左邊的變數兩個等號是判等運算符,用於判斷等號左右兩邊的變數或常量是否相等
『陸』 請問C語言有多少運算符
您好,這樣的:
+
-
*
/
(加減乘除)
%
++
--
"%"求余,就是算除法,值是他的余數
"/"這個是除法,但是有一點注意,兩邊操作數全為整數時,值是取整的。
「++」是自加,比如說i++就是i的值自動加1,規則是i++是鮮賦值再自加,++i是先自加再賦值。舉個例子a=i++這個是先把i的值賦給a,然後i再自加。a=++i是i先自加,然後把自加之後的值賦給a。
「--」是自減,和自加的規則相同,只是值是自動減一。
『柒』 c語言中運算符有哪幾種,優先順序順序是怎樣
C語言中,運算符除了常見的三大類,算術運算符、關系運算符與邏輯運算符之外,還有一些用於完成特殊任務的運算符。
運算符的運算優先順序共分為15 級,1 級最高,15 級最低。 在表達式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算符 優先順序相同時,則按運算符的結合性所規定的結合方向處理。
一級運算符:標識,常量,字元串文字量,優先順序提升表達式最優先執行。
二級運算符:數組下標運算(expression)、函數調用(argument-expression-list)、成員訪問(identifier、-> identifier)、後綴自增(i++)、後綴自減(i--)、復合初始化(initializer-list)。
三級運算符:前綴自增(++i)、前綴自減(--i)、單目轉型表式式(取地址& ,提領 * , 正號+ ,負號-、位反~ 邏輯否!)、求類型長度(sizeof unary-expression)。
四級運算符:強製表達式成為type-name指定的類型( type-name ) cast-expression。
五級運算符:「 * 」 乘法運算符。
六級運算符:「 + 」加法運算符。
七級運算符:<< 左移運算符;>> 右移運算符。
八級運算符:<、<=、>、>=關系運算符。
九級運算符:「 == 」等於運算符;「 != 」不等於運算符。
十級運算符:「 & 」按位與運算符。
十一級運算符:「 ∧ 」按位異或運算符。
十二級運算符:「 | 」按位或運算符。
十三級運算符:「&&」邏輯與運算符。
十四級運算符:「 || 」邏輯或運算符。
十五級運算符:? :條件運算符。
(7)c語言六重運算符擴展閱讀
C語言中各運算符的結合性:
1、左結合性(自左至右):
例如算術運算符的結合性是自左至右,即先左後右。如有表達式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。這種自左至右的結合方向就稱為「左結合性」。
2、右結合性(自右至左)
自右至左的結合方向稱為「右結合性」。最典型的右結合 性運算符是賦值運算符。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)運算。C語言運算符中有不少為右結合性,應注意區別,以避免理解錯誤。
『捌』 C語言裡面的運算符優先順序如何
C語言中,運算符的運算優先順序共分為15 級。1 級最高,15 級最低。 在表達式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算符 優先順序相同時,則按運算符的結合性所規定的結合方向處理。
各等級運算符如下:
(以下說明中,對傳統的1級和2級做了細化,1和2對應傳統1級,3和4對應傳統2級,所以細化說明共有17級。)
1、基本表達式 1級
基本表達式(Primary expressions),主要是用於運算符之間,做為運算數。
標識,常量,字元串文字量,優先順序提升表達式最優先執行。
優先順序提升表達式是指圓括弧包圍的表達式,如「( expression )」
2、後綴表達式 2級
postfix-expression [ expression ],數組下標運算。
postfix-expression ( argument-expression-list),函數調用,括弧內的參數可選。
postfix-expression . identifier,成員訪問,
postfix-expression -> identifier,成員訪問,->號之前應為指針。
postfix-expression ++,後綴自增
postfix-expression --,後綴自減
( type-name ) { initializer-list }
( type-name ) { initializer-list , } 復合初始化,C99後新增。
3、單目/一元運算 3級
++ unary-expression 前綴自增
-- unary-expression 前綴自減
unary-operator cast-expression 單目轉型表式式, 包括 取地址& ,提領 * , 正號+ ,負號- 位反~ 邏輯否!。
sizeof unary-expression 求類型長度,對表達式求類型長度
sizeof ( type-name ) 求類型長度
4、強制類型表達式 4級
( type-name ) cast-expression,強製表達式成為type-name指定的類型。
5、乘法表達式 5級
「 * 」 乘法運算符;「 / 」除法運算符;「 % 」 取余運算符。
6、加法運算符 6級
「 + 」加法運算符;「 - 」減法運算符。
7、移位運算符 7級
<< 左移運算符;>> 右移運算符。
8、關系運算符 8級
<、<=、>、>=關系運算符。
9、相等運算符 9級
「 == 」等於運算符;「 != 」不等於運算符。
10、位與運算符 10級
「 & 」按位與運算符
11、位異或運算符 11級
「 ∧ 」按位異或運算符(Bitwise exclusive OR operator)。
12、位或運算符 12 級
「 | 」按位或運算符(Bitwise inclusive OR operator)。
13、邏輯與運算符 13級
「&&」邏輯與運算符。
14、邏輯或運算符 14 級
「 || 」邏輯或運算符。
15、三元條件運算符 15級
? :條件運算符。
16、賦值運算符 16 級
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算符。
17、逗號運算符 17級
「,」逗號運算符。
具體可參見下圖:
『玖』 C語言 運算符%是怎麼運算的
C語言中%的作用:%作為運算符是用來取余的
運算符(operator)是可以對數據進行相應操作的符號。如對數據求和操作,用加法運算符 '+',求積操作使用乘法運算符 '*' ,求余數用運算符'%'。等等
例如 :
一、25%4=1 ;25除以4商6餘數是1
二、33%5=3 ;33除以5商6餘數是3
(9)c語言六重運算符擴展閱讀:
C語言常用的運算符
1. 算術運算符
用於各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(++)、自減(--)共七種。
2.關系運算符
用於比較運算。包括大於(>)、小於(<)、等於(==)、 大於等於(>=)、小於等於(<=)和不等於(!=)六種。
3.邏輯運算符
用於邏輯運算。包括與(&&)、或(||)、非(!)三種。
4.位操作運算符
參與運算的量,按二進制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
5.賦值運算符
用於賦值運算,分為簡單賦值(=)、復合算術賦值(+=,-=,*=,/=,%=)和復合位運算賦值(&=,|=,^=,>>=,<<=)三類共十一種。
6.條件運算符
這是一個三目運算符,用於條件求值(?:)。
7.逗號運算符
用於把若干表達式組合成一個表達式(,)。
8.指針運算符
用於取內容(*)和取地址(&)二種運算。
9.求位元組數運算符
用於計算數據類型所佔的位元組數(sizeof)。
10.特殊運算符
有括弧(),下標[],成員(→,.)等幾種。
『拾』 C語言運算符都有那些
運算符的種類C語言的運算符可分為以下幾類:
1.算術運算符
用於各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(++)、自減(--)共七種。
2.關系運算符
用於比較運算。包括大於(>)、小於(<)、等於(==)、 大於等於(>=)、小於等於(<=)和不等於(!=)六種。
3.邏輯運算符
用於邏輯運算。包括與(&&)、或(||)、非(!)三種。
4.位操作運算符
參與運算的量,按二進制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
5.賦值運算符
用於賦值運算,分為簡單賦值(=)、復合算術賦值(+=,-=,*=,/=,%=)和復合位運算賦值(&=,|=,^=,>>=,<<=)三類共十一種。
6.條件運算符
這是一個三目運算符,用於條件求值(?:)。
7.逗號運算符
用於把若干表達式組合成一個表達式(,)。
8.指針運算符
用於取內容(*)和取地址(&)二種運算。
9.求位元組數運算符
用於計算數據類型所佔的位元組數(sizeof)。
10.特殊運算符
有括弧(),下標[],成員(→,.)等幾種。