c语言运算程序,C语言运算符
通常我們可把位操作AND作為關閉位的手段,這就是說兩個操作數中任一為0的位,其結果中對應位置為0。例如,下面的函數通過調用函數read_modem(),從調制解調器端口讀入一個字符,并將奇偶校驗位置成0。
字節的位8是奇偶位,將該字節與一個位1到位7為1、位8為0的字節進行與操作,可將該字節的奇偶校驗位置成0。表達式ch&127正是將ch中每一位同127數字的對應位進行與操作,結果ch的位8被置成了0。在下面的例子中,假定ch接收到字符"A"并且奇偶位已經被置位。
一般來說,位的AND、OR和XOR操作通過對操作數運算,直接對結果變量的每一位分別處理。正是因為這一原因(還有其它一些原因),位操作通常不像關系和邏輯運算符那樣用在條件語句中,我們可以用例子說明這一點:假定X=7,那么x&&8為Ture(1),而x&8卻為Flase(0)。
記住,關系和邏輯操作符結果不是0就是1。而相似的位操作通過相應處理,結果可為任意值。換言之,位操作可以有0或1以外的其它值,而邏輯運算符的計算結果總是0或1。移位操作符>>和<
variable>>右移位數
左移語句是:
variable<
當某位從一端移出時,另一端移入0(某些計算機是送1,詳細內容請查閱相應C編譯程序用戶手冊)。切記:移位不同于循環,從一端移出的位并不送回到另一端去,移去的位永遠丟失了,同時在另一端補0。
移位操作可對外部設備(如D/A轉換器)的輸入和狀態信息進行譯碼,移位操作還可用于整數的快速乘除運算。如表2-9所示(假定移位時補0),左移一位等效于乘2,而右移一位等效于除以2。
每左移一位乘2,注意x<<2后,原x的信息已經丟失了,因為一位已經從一端出,每右移一位相當于被2除,注意,乘后再除時,除操作并不帶回乘法時已經丟掉的高位。反碼操作符為~。~的作用是將特定變量的各位狀態取反,即將所有的1位置成0,所有的0位置成1。位操作符經常用在加密程序中,例如,若想生成一個不可讀磁盤文件時,可以在文件上做一些位操作。最簡單的方法是用下述方法,通過1的反碼運算,將每個字節的每一位取反。
原字節?00101100
第一次取反碼?11010011
第二次取反碼?00101100
注意,對同一行進行連續的兩次求反,總是得到原來的數字,所以第一次求反表示了字
節的編碼,第二次求反進行譯碼又得到了原來的值。可以用下面的函數encode()對字符進行編碼。
2.6.5??操作符
C語言提供了一個可以代替某些if-then-else語句的簡便易用的操作符?。該操作符是三元的,其一般形式為:
EXP1?EXE2:EXP3
3
EXP1,EXP2和EXP3是表達式,注意冒號的用法和位置。
操作符“?”作用是這樣的,在計算EXP1之后,如果數值為True,則計算EXP2,并將結果作為整個表達式的數值;如果EXP1的值為Flase,則計算EXP3,并以它的結果作為整個表達式的值,請看下例:
x=10;
;y=x>9?100:200;
例中,賦給y的數值是100,如果x被賦給比9小的值,y的值將為200,若用if-else語句改寫,有下面的等價程序:
x=10;if(x>9)y=100;
;elsey=200;
;
有關C語言中的其它條件語句將在第3章進行討論。
2.6.6?逗號操作符
作為一個操作符,逗號把幾個表達式串在一起。逗號操作符的左側總是作為void(無值),這意味著其右邊表達式的值變為以逗號分開的整個表達式的值。例如:
x=(y=3,y+1);
這行將3賦給y,然后將4賦給x,因為逗號操作符的優先級比賦值操作符優先級低,所以必須使用括號。實際上,逗號表示操作順序。當它在賦值語句右邊使用時,所賦的值是逗號分隔開的表中最后那個表達式的值。例如,
y=10;x=(y=y-5,25/y);
執行后,x的值是5,因為y的起始值是10,減去5之后結果再除以25,得到最終結果。
。在某種意義上可以認為,逗號操作符和標準英語的and是同義詞。
2.6.7關于優先級的小結
表2-10列出了C語言所有操作符的優先級,其中包括將在本書后面討論的某些操作符。注意,所有操作符(除一元操作符和?之外)都是左結合的。一元操作符(*,&和-)及操作符“?”則為右結合。
總結
以上是生活随笔為你收集整理的c语言运算程序,C语言运算符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么看c语言错误出在哪,请各位大佬帮我看
- 下一篇: c语言不用switch做计算器,超级新手