中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中的運算類型有哪些

發布時間:2022-04-21 17:09:28 來源:億速云 閱讀:294 作者:zzz 欄目:開發技術

這篇文章主要介紹“C語言中的運算類型有哪些”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C語言中的運算類型有哪些”文章能幫助大家解決問題。

一、概述

C語言中支持下面4種類型的運算

運算類型運算符
四則運算+,-,*,/,%
關系運算<,>,<=,>=,==,!=
邏輯運算&&,||,!
位運算&,|,^,>>,<<,~

二、四則運算

(+,-,*,/,%)

  • 就是數學中的加,減,乘,除等運算

  • 遵循先乘除后加減的運算優先級

  • 可以使用括號改變運算順序

C語言中的運算類型有哪些

注意:

C語言中的除法運算,其除數不能為0

下面通過一段程序感受一下:

#include <stdio.h>
int main()
{
    int a = 5;
    int b = 2;
    double c = 3;
    c = a / b;
    printf("c = %f\n", c);
    c = a % b;
    printf("c = %f\n", c);
    return 0;
}

下面為輸出結果:

C語言中的運算類型有哪些

通過上面的代碼,可以得到一些小結論:

  • 整型數的除法運算結果會舍棄小數部分

  • 取余(%)運算也是一種除法運算,結果為余數

  • 浮點數不能進行取余運算

三、關系運算

(<,>,<=,>=,==,!=)

  • 比較兩個值大小關系或相等關系的運算

  • 比較的結果為邏輯值: 真(1),假(0)

  • 可以使用括號()改變關系運算的順序

C語言中的運算類型有哪些

如上面的圖片所示,c 的值就為0

下面通過一段代碼,感受一下:

#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    int c = 3;
    c = a != b;
    printf("c = %d\n", c);
    c = a - b >= a + b;
    printf("c = %d\n", c);
    c = (a < b) + (c < b);
    printf("c = %d\n", c);
    return 0;
}

下面為輸出結果:

C語言中的運算類型有哪些

小技巧:如果不同類型的運算同時出現在一個表達式中,那么盡量使用括號()指明運算順序。

運算優先級(優先級:四則運算 > 關系運算 > 賦值操作)

四則運算

  • 正負號 > 乘除運算 > 加減運算

關系運算

  • 大小比較運算 > 相等比較運算

賦值操作

下面看一段代碼,深入感受一下運算優先級:

#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    int c = 0;
    c = a != b + a * b;
    printf("c = %d\n", c);
    return 0;
}

下面為輸出結果,可以看出,c 的輸出結果為1,為什么為1呢?這是由于乘法優先級大于加法優先級大于關系運算優先級,所以程序執行過程是這樣,先計算 a * b,然后將 a * b 的結果 2 加上 b,得到4,最后再比較 a != 4,得到的結果當然為1啦,我們還可以通過反匯編來觀察代碼的執行過程。

C語言中的運算類型有哪些

C語言中的運算類型有哪些

c = a != b + a * b的匯編代碼

所以如果想得到a != b 再加上a * b的結果,一定要記得加括號,如下:

#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    int c = 0;
    c = (a != b) + (a * b);
    printf("c = %d\n", c);
    return 0;
}

這樣才能得到正確結果,如下所示:

C語言中的運算類型有哪些

小結:

  • 整型數除法有兩種:取商(/),取余(%)

  • 浮點數除法與數學中除法運算相同,結果為浮點數

  • 不同運算的優先級不同,可使用括號改變運算優先級

  • 同一個表達式中應避免不同的運算類型(四則運算,關系運算)

四、邏輯運算與位運算

邏輯運算(&&,ll,!)

  • 邏輯運算的參與者為邏輯值(真或假)

  • 任何非零值在邏輯運算中都為真

  • 任何零值在邏輯運算中都為假

&&運算
左操作數右操作數結果
000
010
100
111
||運算
左操作數右操作數結果
000
011
101
111

邏輯運算中的短路法則

對于&&運算

  • 從左向右進行,如果有一個操作數為假,則整個表達式為假

  • 第一個為假的操作數之后的其它操作數不再計算

對于||運算

  • 從左向右進行,如果有一個操作數為真,則整個表達式為真

  • 第一個為真的操作數之后的其它操作數不再計算

取非運算(!)

單目運算(只需要一個操作數),運算結果為邏輯值

  • 對真值取非的結果為假

  • 對假值取非得結果為真

話不多說,上代碼:

#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    int c = 0;
    c = a && b;
    printf("c = %d\n", c);
    c = !(a - b) || (c < b);
    printf("c = %d\n", c);
    c = 10000;
    c = !!c;
    printf("c = %d\n", c);
    return 0;
}

下面為運行結果:

C語言中的運算類型有哪些

位運算(&,|,~,^,<<,>>)

  • 直接對數據的二進制位進行操作

  • 位運算的基本單位是二進制位,所以也是一種0和1的操作

  • 可以使用括號()改變位運算的運算順序

  • 位運算的操作數只能是整型數(浮點數不能直接進行位運算)

運算符含義示例優先級
~按位求反~0101 -> 10101(高)
<<左移:高位移出,低位補00011 << 1 -> 0110 2
>>右移:低位移出,高位補符號位0101 >> 2 -> 00012
&按位與0111 & 1100 -> 01003
^按位異或:相同為0,不同為10111 ^ 1100 -> 10114
|按位或0111 | 1100 -> 11115(低)

注:

1.按位與和邏輯與的計算法相同:兩者為1,結果為1,否則為0

2.按位或和邏輯或的計算法相同:兩者為0,結果為0,否則為1

位運算實例

  • 將整數5的第2個二進制位置1

  • 將整數7的第4個二進制位取反

  • 將整數2的最后兩位取反

  • 將整數15右移2位,再將第2個二進制位置0

  • 設變量a的二進制數是10101101,若想通過運算a ^ b使得a的中間4位取反,其余位不變,則b的值是多少?

代碼如下:

#include <stdio.h>
int main()
{
    printf("c = %d\n", 5 | 2);
    printf("c = %d\n", 7 ^ 8);
    printf("c = %d\n", 2 ^ 3);
    printf("c = %d\n", (15 >> 2) & 13);
    printf("c = %d\n", 173 ^ 60);
    return 0;
}

運行結果如下:

C語言中的運算類型有哪些

這里需要特別注意:對某一位或者某幾位取反可以用異或(^)運算,這在工程里常用!!!

運算優先級(優先級從上到下為由高到低)

  • 正負號>邏輯非>按位取反

  • 乘除>加減>按位左右移

  • 大小比較運算>相等比較運算

  • 按位與>按位異或>按位或

  • 邏輯與>邏輯或

  • 賦值操作

小結

  • 邏輯運算中有特殊的短路法則,結果確定后不再向下計算

  • C語言中的真值對應非零值,假值對應零值

  • 位運算直接對數據的二進制位進行操作

  • 位運算的操作數只能是整型數(浮點數不能直接進行位運算)

五、深度剖析位運算

不同類型的本質在于:

占用的內存大小不同,如:short占用2字節,int占用4字節

表示具體數據的方式不同

  • 正整數用原碼表示,負整數用補碼表示

  • 整數型和浮點型的二進制表示不同

位運算時需要明確的知道的事

  • 操作數的類型(占用的內存大小)

  • 操作數是正數還是負數(符號位,數據表示)

  • 不同類型的操作數先自動對齊再進行位運算(補符號位)

如下面的一段代碼:

short a = 1;
int b = 4;
int c = a | b;
printf("c = %d\n",c);

b為int類型,占4個字節,a為short類型,占2個字節。所以a要先要補符號位,由于a是正數,所以補0,這樣就可以進行位運算了,得出c的結果為5。

C語言中的運算類型有哪些

下面來看一段代碼:

#include <stdio.h>
int main()
{
    short a = 1;
    short b = 2;
    int c = a - b;
    c = c >> 4;
    printf("c = %d\n", c);
    c = c * -1 * 16 >> 4;
    printf("c = %d\n", c);
    printf("c = %d\n", 16 << 2);
    return 0;
}

下面為輸出結果:

C語言中的運算類型有哪些

小結論

  • 正數符號位為0,右移運算時,高位補0,低位移除

  • 負數符號位為1,右移運算時,高位補1,低位移除

  • 左移運算時,最高位移除,低位補0

  • 最高位的具體位置,由數據類型決定

類型補充小知識

  • char 字符型,一個字節的整型,范圍[-128,127]

  • 字符數據(單引號括起來的字符)的本質是整型數

  • char類型的變量可以打印為整數或者字符

再看一段代碼:

#include <stdio.h>
int main()
{
    char c = 'A';
    short a = c;
    int b = c;
    printf("c = %c\n", c);
    printf("c = %d\n", c);
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    c = 0x40;
    printf("c = %x\n", c);
    printf("c = %d\n", c);
    c = c << 1;
    printf("c = %d\n", c);
    c = c << 1;
    printf("c = %d\n", c);
    return 0;
}

下面為輸出結果:

C語言中的運算類型有哪些

需要注意的是,因為c為char類型,所以64左移1位后,用二進制表示為1000 0000,最高位的1表示符號位,所以就是-128。

小結

  • 不同類型的本質區別是:占用內存不同,數據表示不同

  • 右移運算時,高位補符號位,低位移除

  • char是只占用一個字節的整型,可表示英文字符

  • 數據符號位的具體位置由數據類型決定

關于“C語言中的運算類型有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正阳县| 临武县| 丰城市| 武穴市| 桐庐县| 阿克| 凤凰县| 禄劝| 宁阳县| 隆安县| 和平区| 洞口县| 咸阳市| 白沙| 天长市| 五华县| 榆中县| 滨州市| 兴业县| 锦屏县| 澄城县| 南部县| 湘潭市| 吉水县| 丹阳市| 秦皇岛市| 浦城县| 延吉市| 牙克石市| 柳林县| 新龙县| 临江市| 琼结县| 石家庄市| 房山区| 竹山县| 滦平县| 重庆市| 三河市| 德化县| 横峰县|