第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

C 語(yǔ)言入門(mén)教程

C 語(yǔ)言基礎(chǔ)教程
01 C 語(yǔ)言簡(jiǎn)介 02 C 語(yǔ)言的程序結(jié)構(gòu) 03 C 語(yǔ)言的編譯 04 C 語(yǔ)言的標(biāo)準(zhǔn) 05 C 語(yǔ)言中的注釋 06 C 語(yǔ)言中的變量 07 C 語(yǔ)言中的變量類(lèi)型 08 C 語(yǔ)言的常量 09 C 語(yǔ)言的輸入與輸出 10 C 語(yǔ)言中的 printf() 格式輸出 11 C 語(yǔ)言中的類(lèi)型轉(zhuǎn)換 12 C 語(yǔ)言中的運(yùn)算符 13 C 語(yǔ)言中的算數(shù)運(yùn)算符 14 C 語(yǔ)言中的位運(yùn)算符 15 C 語(yǔ)言中的邏輯運(yùn)算符 16 C 語(yǔ)言中的三目運(yùn)算符 17 C 語(yǔ)言中的分支結(jié)構(gòu) 18 C 語(yǔ)言中的多重分支 19 C 語(yǔ)言中的分支嵌套結(jié)構(gòu) 20 C 語(yǔ)言中的循環(huán)結(jié)構(gòu) 21 C 語(yǔ)言中的 while 循環(huán) 22 C 語(yǔ)言中的 do-While 循環(huán) 23 C 語(yǔ)言中的 for 循環(huán) 24 C 語(yǔ)言中的多重循環(huán)嵌套 25 循環(huán)實(shí)戰(zhàn),打印九九乘法表 26 C 語(yǔ)言中的break和continue 27 C 語(yǔ)言中的 if 語(yǔ)句 28 C 語(yǔ)言中的 switch/case 語(yǔ)句 29 C 語(yǔ)言中的函數(shù) 30 C 語(yǔ)言函數(shù)的定義和聲明 31 C 語(yǔ)言中函數(shù)的參數(shù)傳入類(lèi)型 32 C 語(yǔ)言中的 main() 函數(shù)參數(shù) 33 make 工具 makefile 34 C 語(yǔ)言中的數(shù)組 35 C 語(yǔ)言中的多維數(shù)組 36 數(shù)組的練習(xí) 37 C 語(yǔ)言中的字符串 38 C 語(yǔ)言中的字符串函數(shù) 39 C 語(yǔ)言字符串練習(xí) 40 C 語(yǔ)言中的指針 41 C 語(yǔ)言中的 struct 42 C 語(yǔ)言中的 union 43 C 語(yǔ)言中的 maclloc free() 44 C 語(yǔ)言中的 enum 45 整體練習(xí)-學(xué)生管理系統(tǒng)

C 語(yǔ)言中的位運(yùn)算符

在 C 語(yǔ)言中,相同的數(shù)字可以用不同的數(shù)制來(lái)表示。也就是十進(jìn)制的數(shù)字可以等價(jià)的表示為二進(jìn)制或者十六進(jìn)制。那么對(duì)于二進(jìn)制來(lái)說(shuō),可以進(jìn)行逐個(gè)數(shù)字之間,也就是每一個(gè)數(shù)字位的運(yùn)算。這種運(yùn)算也廣泛的存在我們?nèi)粘淌褂玫臄?shù)字電路中。其實(shí)計(jì)算機(jī)的運(yùn)算原理最底層就是位運(yùn)算,也就是 0 和 1 的運(yùn)算。

1. 位運(yùn)算符

運(yùn)算符 作用 示例
& 位與 a&b
| 位或 a|b
^ 位異或 a^b
~ 位非 ~b
<< 位左移 a<<b
>> 位右移 a>>b

對(duì)于位運(yùn)算中的與、或、異或可以通過(guò)下面的表格來(lái)闡明。

x y x & y x | y x ^ y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

對(duì)于非操作符有下表的結(jié)果。

x ~x
0 1
1 0

移位操作就是將位向左或者向右移動(dòng),空位用 0 來(lái)補(bǔ)齊。

2. 示例

# include <stdio.h>

int main()
{
    int x,y,z;
    x=10; // 10 = 1010
    y=15; // 15 = 1111
    z=x&y;
    printf("x & y = %d\n", z);
    z=x|y;
    printf("x | y = %d\n", z);
    z=x^y;
    printf("x ^ y = %d\n", z);
    z=~x;
    printf("~ x = %d\n", z);
    z=~y;
    printf("~ y = %d\n", z);
    z=x<<2;
    printf("x << 2 = %d\n", z);
    z=y>>2;
    printf("x >> 2 = %d\n", z);
    return 0;
}

運(yùn)行結(jié)果如下:

x & y = 10
x | y = 15
x ^ y = 5
~ x = -11
~ y = -16
x << 2 = 40
x >> 2 = 3

那么我們分析一下這些結(jié)果。

     10 = 1 0 1 0
     15 = 1 1 1 1
10 & 15 = 1 0 1 0

按照上節(jié)的表格計(jì)算后,發(fā)現(xiàn) 10 與 15 進(jìn)行位與計(jì)算后,結(jié)果為 10 。

     10 = 1 0 1 0
     15 = 1 1 1 1
10 | 15 = 1 1 1 1

按照上節(jié)的表格計(jì)算后,發(fā)現(xiàn) 10 與 15 進(jìn)行位或計(jì)算后,結(jié)果為 15 。

     10 = 1 0 1 0
     15 = 1 1 1 1
10 ^ 15 = 0 1 0 1

按照上節(jié)的表格計(jì)算后,發(fā)現(xiàn) 10 與 15 進(jìn)行位異或計(jì)算后,結(jié)果為 5 。

  10 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
~ 10 = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1

因?yàn)橐粋€(gè)整數(shù)是由 4 個(gè)字節(jié)組成,每個(gè)字節(jié)是 8 位,因此
在 1010 前還有 28 個(gè) 0 存在。將這些 0 全部變?yōu)?1 ,這時(shí)的數(shù)字代表 -11。

  15 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
~ 15 = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0

在 1111 前還有 28 個(gè) 0 存在。將這些 0 全部變?yōu)?1 ,這時(shí)的數(shù)字代表 -40。

     10 =     1 0 1 0
10 << 2 = 1 0 1 0 0 0

把 10 向左移動(dòng)兩位,右面的空余位置用 0 補(bǔ)齊。

Tips:請(qǐng)?zhí)貏e注意,在向左移位的過(guò)程中,如果左移的位數(shù)超出數(shù)據(jù)的存儲(chǔ)最大位數(shù),那么將產(chǎn)生錯(cuò)誤。

下面的示例程序展示了這種錯(cuò)誤。

# include <stdio.h>

int main()
{
    int x,y,z;
    x=10; // 10 = 1010
    z=x<<200;
    printf("x << 200 = %d\n", z);
    return 0;
}

顯然超過(guò)了 int 類(lèi)型可以表示的最大位數(shù)。

在編譯的時(shí)候,會(huì)出現(xiàn)如下的錯(cuò)誤。

test.c: In function ‘main’:
test.c:7:8: warning: left shift count >= width of type [-Wshift-count-overflow]
     z=x<<200;
     15 = 1 1 1 1
15 >> 2 = 0 0 1 1

把 15 向右移動(dòng)兩位,左面的空位用 0 補(bǔ)齊。

3. 小結(jié)

位運(yùn)算作為一種直接的,符合數(shù)字電路邏輯的運(yùn)算,廣泛的存在于我們的生活中。在編程語(yǔ)言中,通過(guò)位運(yùn)算可以方便的獲得如網(wǎng)絡(luò)地址的計(jì)算,還有我們?nèi)粘5囊恍┘訙p乘除都是可以通過(guò)位運(yùn)算來(lái)實(shí)現(xiàn)的。只不過(guò)很多運(yùn)算由于表示不直觀,容易出錯(cuò),所以還是使用了普通的算數(shù)運(yùn)算符等來(lái)進(jìn)行計(jì)算。

同時(shí)也要區(qū)分,位運(yùn)算與我們介紹的邏輯運(yùn)算符很相似,所以請(qǐng)大家注意區(qū)分。