国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【C語(yǔ)言初階】?? 教你使用C語(yǔ)言中的各種操作符(熟練運(yùn)用+必須收藏)??

source / 3378人閱讀

溫馨提示

大家好我是Cbiltps,在我的博客中如果有難以理解的句意難以用文字表達(dá)的重點(diǎn),我會(huì)有配圖。所以我的博客配圖非常重要!!!

如果你對(duì)我感興趣請(qǐng)看我的第一篇博客

本章重點(diǎn)

  1. 各種操作符的介紹。
  2. 表達(dá)式求值

正文開(kāi)始


1. 操作符分類(lèi)


  • 算術(shù)操作符
  • 移位操作符
  • 位操作符
  • 賦值操作符
  • 單目操作符
  • 關(guān)系操作符
  • 邏輯操作符
  • 條件操作符
  • 逗號(hào)表達(dá)式
  • 下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員

2.算數(shù)操作符


算數(shù)操作符有:+ - * / %
除了%操作符之外,其他的幾個(gè)操作符可以作用于整數(shù)和浮點(diǎn)數(shù)。

2.1 /操作符

#include int main(){	int ret = 9 / 2;//對(duì)于 /(除號(hào)) 兩邊都是整數(shù),執(zhí)行的整數(shù)除法	double ret2 = 9 / 2;//它的值是什么?	double ret3 = 9 / 2.0;//它的值是什么?	printf("%d/n", ret);	printf("%lf/n", ret2);	printf("%lf/n", ret3);	return 0;}

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

第二個(gè)結(jié)果還是4.0,為什么呢?
因?yàn)椴僮鲾?shù)中有浮點(diǎn)數(shù),才執(zhí)行浮點(diǎn)數(shù)除法。

2.2 %操作符

%操作符是取模操作符,也叫取余操作符

int ret4 = 10 % 4;printf("%d", ret4);//打印出來(lái)是2

注意:%操作符只能針對(duì)整形類(lèi)型


3. 位移操作符


<< 左移操作符>> 右移操作符

3.1 <<左移操作符

int a = 5;int b = a << 1;printf("%d/n", b);//打印出來(lái)的是 10    //要看懂下面的圖解,要明白一些知識(shí)點(diǎn):        //移位操作符,移動(dòng)的是二進(jìn)制位	//對(duì)于整數(shù)的二進(jìn)制有3中表示形式:原碼、反碼、補(bǔ)碼		//正整數(shù) - 原碼、反碼、補(bǔ)碼相同	//負(fù)整數(shù)		//原碼 - 直接按照數(shù)字的正負(fù)寫(xiě)出的二進(jìn)制序列	//反碼 - 原碼的符號(hào)位不變,其他位按位取法得到的	//補(bǔ)碼 - 反碼+1		//整數(shù) 在內(nèi)存中存儲(chǔ)的是二進(jìn)制的補(bǔ)碼


如果是一個(gè)負(fù)數(shù)的話,看代碼:

int c = -1;int d = c << 1;printf("%d/n", d);//打印的是原碼的值,打印出來(lái)是 -2	//10000000000000000000000000000001 - 原碼	//11111111111111111111111111111110 - 反碼	//11111111111111111111111111111111 - 補(bǔ)碼


移位規(guī)則:左邊拋棄、右邊補(bǔ)0

關(guān)于原碼、反碼、補(bǔ)碼,請(qǐng)大家看我寫(xiě)的另一篇進(jìn)階博客

3.2 >>左移操作符

移位規(guī)則:
1. 邏輯移位:左邊用0填充,右邊丟棄
2. 算術(shù)移位:左邊用原該值的符號(hào)位填充,右邊丟棄

舉例:

int a = 5;int b = a >> 1;printf("%d/n", b);//打印出來(lái)的是 2


再用負(fù)數(shù)舉個(gè)例子:

int c = -1;int d = c << 1;printf("%d/n", d);//打印出來(lái)還是 -1


在這里是補(bǔ)了原來(lái)的符號(hào)位,所以 VS2019 采用算術(shù)右移!

警告? :
1:對(duì)于移位運(yùn)算符,不要移動(dòng)負(fù)數(shù)位,這個(gè)是標(biāo)準(zhǔn)未定義的。
2:不管是被移動(dòng)數(shù)還是移動(dòng)的位數(shù)都必須是整數(shù)。

例如(錯(cuò)誤演示):

int num = 10;num>>-1;//error

4. 位操作符


位操作符有:

  • & 按位與
  • | 按位或
  • ^ 按位異或

注:他們的操作數(shù)必須是整數(shù)。

4.1 &按位與操作符

計(jì)算規(guī)則:
1:二進(jìn)制位上只要有0,那就是0
2:二進(jìn)制位上兩個(gè)同時(shí)為1,那就是1

	int a = 3;	int b = -2;	int c = a & b;	printf("%d/n", c);//打印出來(lái)是 2		//%d - 說(shuō)明我們要打印c的值,以有符號(hào)的形式		//00000000000000000000000000000011 -3的原碼	//11111111111111111111111111111110 -2的補(bǔ)碼	//00000000000000000000000000000010 這個(gè)數(shù)是2

4.2 |按位或操作符

計(jì)算規(guī)則: 二進(jìn)制位只要有1,就為1

int a = 3;int b = -2;int c = a | b;printf("%d/n", c);//打印 -1	//00000000000000000000000000000011 -3的原碼	//11111111111111111111111111111110 -2的補(bǔ)碼	//11111111111111111111111111111111	//11111111111111111111111111111111 補(bǔ)碼	//11111111111111111111111111111110 反碼	//10000000000000000000000000000001 原碼 它的值是-1

4.3 ^按位異或操作符

計(jì)算規(guī)則: 二進(jìn)制位相同為0,相異為1

int a = 3;int b = -2;int c = a ^ b;//打印出來(lái)是 -3printf("%d/n", c);	//00000000000000000000000000000011 -3的原碼	//11111111111111111111111111111110 -2的補(bǔ)碼	//11111111111111111111111111111101	//11111111111111111111111111111101 補(bǔ)碼	//11111111111111111111111111111100 反碼	//10000000000000000000000000000011 原碼 它的值是-3

一道{{BANNED}}的面試題:

不能創(chuàng)建臨時(shí)變量(第三個(gè)變量),實(shí)現(xiàn)兩個(gè)數(shù)的交換。

#include int main(){	int a = 3;	int b = 5;	printf("交換前:a=%d b=%d/n", a, b);	a = a ^ b;	b = a ^ b;	a = a ^ b;	printf("交換后:a=%d b=%d/n", a, b);	return 0;}

思路圖解:

注意:這樣寫(xiě)代碼的可讀性不夠好,而且只適用于整型


5. 賦值操作符


賦值操作符可以讓你得到一個(gè)你之前不滿意的值,也就是你可以給自己重新賦值

int weight = 120;//體重weight = 89;//不滿意就賦值double salary = 10000.0;salary = 20000.0;//使用賦值操作符賦值

賦值操作符可以連續(xù)使用,比如:

int a = 10;int x = 0;int y = 20;a = x = y + 1;//連續(xù)賦值

這樣的代碼感覺(jué)怎么樣?

那這樣寫(xiě):

x = y + 1;a = x;

更加清晰爽朗而且易于調(diào)試

復(fù)合賦值符:

  • +=
  • -=
  • *=
  • /=
  • %=
  • <<=
  • &=
  • |=
  • ^=

這些運(yùn)算符都可以寫(xiě)成復(fù)合的效果,比如:

int x = 10;x = x + 10;x += 10;//復(fù)合賦值

6. 單目操作符


單目操作符就是只有一個(gè)操作數(shù)的操作符

6.1 各種單目操作符

! 邏輯反操作

- 負(fù)值

+ 正值

& 取地址

&arr[0];//數(shù)組首元素的地址&arr[9];//取出的是第10個(gè)元素的地址&arr;//取出數(shù)組的地址

sizeof 操作數(shù)的類(lèi)型長(zhǎng)度(以字節(jié)為單位)

  • sizeof是操作符,不是函數(shù)
  • sizeof是計(jì)算變量或者類(lèi)型創(chuàng)建變量的內(nèi)存大小(單位:字節(jié)),單位是和內(nèi)存中存放什么數(shù)據(jù)沒(méi)有關(guān)系
//以下幾種寫(xiě)法都是一樣的printf("%d/n", sizeof(a));//4printf("%d/n", sizeof a);//4printf("%d/n", sizeof(int));//4
//這里有一個(gè)問(wèn)題;int a = 5;short s = 10;printf("%d/n", sizeof(s = a + 2));//打印出來(lái)是 2printf("%d/n", s);  //打印出來(lái)是 10  因?yàn)椋簊izeof 內(nèi)部的表達(dá)式不參與運(yùn)算

~ 對(duì)一個(gè)數(shù)的二進(jìn)制按位取反

  • 包括符號(hào)位也可以按位取反
#incluide <stdio.h>int main(){	int a = 0;	//00000000000000000000000000000000	int b = ~a;	printf("%d/n", b);	//00000000000000000000000000000000	//11111111111111111111111111111111 所有位按位取反	// 	//11111111111111111111111111111110 反碼	//10000000000000000000000000000001 原碼	//-1	return 0;}

-- 前置、后置--

  • 前置- -:先- -,后使用
int a = 10;int b = a--;printf("%d/n", b);//這里打印出來(lái)還是 10
  • 后置- -:先使用,后- -
int a = 10;int b = --a;printf("%d/n", b);//這里打印出來(lái)才是9

++ 前置、后置++

  • 前置++:先++,后使用
  • 后置++:先使用,后++

千萬(wàn)注意:不要這樣子寫(xiě)代碼(垃圾代碼),會(huì)被公司開(kāi)除的!

int main(){	int a = 1;	int b = (++a) + (++a) + (++a);//err	printf("b=%d/n", b);	return 0;}

這里兩個(gè)編譯器下不一樣!

* 間接訪問(wèn)操作符(解引用操作符),可以和& 取地址搭配使用

(類(lèi)型) 強(qiáng)制類(lèi)型轉(zhuǎn)換

int a = (int)3.14;//默認(rèn)寫(xiě)出的浮點(diǎn)數(shù)是double的,所以可以強(qiáng)制轉(zhuǎn)換printf("%d/n", a);return 0;

6.2 sizeof 和 數(shù)組

我們來(lái)看一個(gè)題,看它們分別輸出的是多少:

#include void test1(int arr[])//它的本質(zhì)數(shù)是(int* arr[]){	printf("%d/n", sizeof(arr));//傳的是首元素的地址}void test2(char ch[]){	printf("%d/n", sizeof(ch));//(4)}int main(){	int arr[10] = { 0 };	char ch[10] = { 0 };		printf("%d/n", sizeof(arr));//數(shù)組名多帶帶放在sizeof內(nèi)部,數(shù)組名表示整個(gè)數(shù)組	printf("%d/n", sizeof(ch));//(3)	test1(arr);	test2(ch);	return 0;}

輸出結(jié)果:

更多關(guān)于數(shù)組的知識(shí)請(qǐng)看我的上一篇博客


7. 關(guān)系操作符(后面的操作符不多帶帶出現(xiàn)在目錄中)


關(guān)系操作符在同類(lèi)之間比較才有意義!

  • >
  • >=
  • <
  • <=
  • != 用于測(cè)試“不相等”
  • == 用于測(cè)試“相等”

這些關(guān)系運(yùn)算符比較簡(jiǎn)單,沒(méi)什么可講的,但是我們要注意一些運(yùn)算符使用時(shí)候的陷阱。
注意:在編程的時(shí)候 === 寫(xiě)錯(cuò),會(huì)導(dǎo)致出錯(cuò)!


8. 邏輯操作符


  • && 邏輯與
    一假必假:
int a = 0;int b = 3;int c = a && b;//只判斷真假,所以打印出來(lái)是 0
  • || 邏輯或
    一真必真:
int a = 0;int b = 3;int c = a || b;printf("%d/n", c);//打印出來(lái)是 1

來(lái)看一道 360 的筆試題:

#include int main(){	int i = 0, a = 0, b = 2, c = 3, d = 4;	i = a++ && ++b && d++;	//i = a++||++b||d++;	printf(" a = %d /n b = %d /n c = %d /nd = %d/n", a, b, c, d);//打印出來(lái)的是1 2 3 4		return 0;}

思路圖解:

那如果是邏輯或的話:

#include int main(){	int i = 0, a = 0, b = 2, c = 3, d = 4;	i = a++ || ++b || d++;	printf(" a = %d/n b = %d /n c = %d/n d = %d/n", a, b, c, d);//打印錯(cuò)來(lái)的是1 3 3 4		return 0;}

思路圖解:


9. 條件操作符


條件操作符也叫三目操作符

exp1 ? exp2 : exp3

int a = 0;int b = 0;if (a > 5)	b = 3;else	b = -3;	//這里有更簡(jiǎn)單的寫(xiě)法:(a > 5) ? (b = 3) : (b = -3);//直接搞定

10. 逗號(hào)表達(dá)式


exp1, exp2, exp3, …expN

逗號(hào)表達(dá)式,就是用逗號(hào)隔開(kāi)的多個(gè)表達(dá)式。
逗號(hào)表達(dá)式規(guī)則:從左向右依次執(zhí)行,整個(gè)表達(dá)式的結(jié)果是最后一個(gè)表達(dá)式的結(jié)果

代碼演示:

//代碼1int a = 1;int b = 2;int c = (a>b, a=b+10, a, b=a+1);//c是多少?看的是最后一個(gè)表達(dá)式//代碼2if (a =b + 1, c=a / 2, d > 0)//最后一個(gè)表達(dá)式判斷的是 d > 0
//代碼3a = get_val();count_val(a);while (a > 0)//注意;這樣寫(xiě)非常的冗余{	//業(yè)務(wù)處理	a = get_val();	count_val(a);}//如果使用逗號(hào)表達(dá)式,改寫(xiě):while (a = get_val(), count_val(a), a > 0){    //業(yè)務(wù)處理}

11. 下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員


[ ] 下標(biāo)引用操作符
操作數(shù):一個(gè)數(shù)組名 + 一個(gè)索引值

int arr[10];//創(chuàng)建數(shù)組arr[9] = 10;//實(shí)用下標(biāo)引用操作符。//[ ]的兩個(gè)操作數(shù)是arr和9。
//下面表達(dá)的意思都是相同的 arr[4] -- > *(arr+4) --> *(4+arr) --> 4[arr]

( ) 函數(shù)調(diào)用操作符

接受一個(gè)或者多個(gè)操作數(shù):第一個(gè)操作數(shù)是函數(shù)名,剩余的操作數(shù)就是傳遞給函數(shù)的參數(shù)。

void test(){	printf("hehe/n");}int main(){	test();//這里就是函數(shù)調(diào)用操作符	return 0;}

結(jié)構(gòu)成員訪問(wèn)操作符

  • . 結(jié)構(gòu)變量.成員名
  • -> 結(jié)構(gòu)體指針->成員名
#include struct Book{	char name[20];	float price;	char id[10];};void print1(struct Book b){	printf("書(shū)名: %s/n", b.name);//在這里訪問(wèn)結(jié)構(gòu)體成員	printf("價(jià)格: %f/n", b.price);	printf("書(shū)號(hào): %s/n", b.id);	//*(b.name);}void print2(struct Book* pb){	/*printf("書(shū)名: %s/n", (*pb).name);	printf("價(jià)格: %f/n", (*pb).price);	printf("書(shū)號(hào): %s/n", (*pb).id);*/	printf("書(shū)名: %s/n", pb->name);//也可以這樣訪問(wèn)	printf("價(jià)格: %f/n", pb->price);	printf("書(shū)號(hào): %s/n", pb->id);}int main(){	struct Book b = {"C語(yǔ)言程序設(shè)計(jì)", 55.5f, "C20190201"};	print2(&b);	//print1(b);	//結(jié)構(gòu)成員訪問(wèn)操作符	//結(jié)構(gòu)變量.成員名	//結(jié)構(gòu)體指針->成員名	//(*結(jié)構(gòu)體指針).成員名	return 0;}

12. 表達(dá)式求值


表達(dá)式求值的順序一部分是由操作符的優(yōu)先級(jí)結(jié)合性決定
同樣,有些表達(dá)式的操作數(shù)在求值的過(guò)程中可能需要轉(zhuǎn)換為其他類(lèi)型

12.1 隱式類(lèi)型轉(zhuǎn)換

C語(yǔ)言的整型算術(shù)運(yùn)算總是至少以缺省整型類(lèi)型的精度來(lái)進(jìn)行的。

為了獲得這個(gè)精度,表達(dá)式中的字符和短整型操作數(shù)在使用之前被轉(zhuǎn)換為普通整型,這種轉(zhuǎn)換稱為整型提升

整型提升的意義:

表達(dá)式的整型運(yùn)算要在 CPU 的相應(yīng)運(yùn)算器件內(nèi)執(zhí)行,CPU 內(nèi)整型運(yùn)算器 (ALU) 的操作數(shù)的字節(jié)長(zhǎng)度
一般就是 int 的字節(jié)長(zhǎng)度,同時(shí)也是 CPU 的通用寄存器的長(zhǎng)度。

因此,即使兩個(gè) char 類(lèi)型的相加,在 CPU 執(zhí)行時(shí)實(shí)際上也要先轉(zhuǎn)換為 CPU 內(nèi)整型操作數(shù)的標(biāo)準(zhǔn)長(zhǎng)
度。

通用 CPU(general-purpose CPU)是難以直接實(shí)現(xiàn)兩個(gè)8比特字節(jié)直接相加運(yùn)算(雖然機(jī)器指令
中可能有這種字節(jié)相加指令)。所以,表達(dá)式中各種長(zhǎng)度可能小于 int 長(zhǎng)度的整型值,都必須先轉(zhuǎn)
換為 int 或 unsigned int,然后才能送入 CPU 去執(zhí)行運(yùn)算。

如何進(jìn)行整體提升呢?
整形提升是按照變量的數(shù)據(jù)類(lèi)型的符號(hào)位來(lái)提升的

  • 負(fù)數(shù)的整型提升:
char c1 = -1;//變量c1的二進(jìn)制位(補(bǔ)碼)中只有8個(gè)比特位://1111111//因?yàn)?char 是有符號(hào)的 char//所以整形提升的時(shí)候,高位補(bǔ)充符號(hào)位,即為1//提升之后的結(jié)果是://11111111111111111111111111111111
  • 正數(shù)的整型提升:
char c2 = 1;//變量c2的二進(jìn)制位(補(bǔ)碼)中只有8個(gè)比特位://00000001//因?yàn)?char 是有符號(hào)的 char//所以整形提升的時(shí)候,高位補(bǔ)充符號(hào)位,即為0//提升之后的結(jié)果是://00000000000000000000000000000001

注意:無(wú)符號(hào)整形提升,高位補(bǔ)0

//舉例:#include int main(){	char a = 3;//a是1byte - 8bit	//00000000000000000000000000000011	//00000011 - a	
                 
               
              

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/119290.html

相關(guān)文章

  • ??蘇州程序大白一文從基礎(chǔ)手把手教你Python數(shù)據(jù)可視化大佬??《??記得收藏??

    ??蘇州程序大白一文從基礎(chǔ)手把手教你Python數(shù)據(jù)可視化大佬??《??記得收藏??》 目錄 ????開(kāi)講啦!!!!????蘇州程序大白?????博主介紹前言數(shù)據(jù)關(guān)系可視化散點(diǎn)圖 Scatter plots折線圖強(qiáng)調(diào)連續(xù)性 Emphasizing continuity with line plots同時(shí)顯示多了圖表 數(shù)據(jù)種類(lèi)的可視化 Plotting with categorical da...

    Drinkey 評(píng)論0 收藏0
  • ??整理2萬(wàn)字帶你走進(jìn)C語(yǔ)言(詳細(xì)講解+代碼演示+圖解)??(強(qiáng)烈建議收藏!!!)

    目錄 一、什么是C語(yǔ)言? 二、第一個(gè)C語(yǔ)言程序 代碼 程序分析 ?程序運(yùn)行 一個(gè)工程中出現(xiàn)兩個(gè)及以上的main函數(shù) 代碼 運(yùn)行結(jié)果 分析 三、數(shù)據(jù)類(lèi)型 數(shù)據(jù)各種類(lèi)型 為什么會(huì)有這么多的數(shù)據(jù)類(lèi)型? 計(jì)算機(jī)單位 ?各個(gè)數(shù)據(jù)類(lèi)型的大小 ?注意事項(xiàng) 數(shù)據(jù)類(lèi)型的使用 四、變量和常量 變量的分類(lèi) 變量的使用 變量的作用域和生命周期 ?常量 五、字符串+轉(zhuǎn)義字符+注釋 字符串 ?轉(zhuǎn)義字符 注釋 六、選擇語(yǔ)句 ?...

    邱勇 評(píng)論0 收藏0
  • ??蘇州程序大白一文教你學(xué)會(huì)微信小程序開(kāi)發(fā)??《??記得收藏??

    ??蘇州程序大白一文教你學(xué)會(huì)微信小程序開(kāi)發(fā)??《??記得收藏??》 目錄 ????開(kāi)講啦!!!!????蘇州程序大白?????博主介紹?前言?講講專享小程序有什么優(yōu)勢(shì)? ?小程序文件分析?事件綁定?圖片問(wèn)題?輪播圖swiper?自定義組件?生命周期?頁(yè)面生命周期?項(xiàng)目制作?緩沖事件?`es7 async`語(yǔ)法 ?觸底事件??下拉刷新頁(yè)面??css省略號(hào)??預(yù)覽大圖??購(gòu)物車(chē)模擬??獲取地...

    劉明 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<