最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言各種操作符透徹理解下篇

 更新時(shí)間:2022年02月10日 15:59:33   作者:七憶歲和  
C?語(yǔ)言提供了豐富的操作符,除了上篇中的算術(shù)操作符,移位操作符,位操作符,賦值操作符外,還有單目操作符、關(guān)系操作符、邏輯操作符、條件操作符等等,讓我們通讀本篇來(lái)詳細(xì)了解吧

1.單目操作符

之前有了解到的三目操作符(?:),指的是有三個(gè)操作數(shù)

例如:3+5

其中,+是一個(gè)操作符

3是左操作數(shù)

5是有操作數(shù)

+則是一個(gè)雙目操作符

那么什么是單目操作符呢,也就是只有一個(gè)操作數(shù)的

我們常見(jiàn)的操作符有:

 這里我們來(lái)詳細(xì)介紹一下sizeof、~、++與--

1.sizeof

sizeof常用來(lái)計(jì)算類(lèi)型的長(zhǎng)度,比如數(shù)組類(lèi)型,int、char、short等等。同時(shí),sizeof是操作符,不是函數(shù),所以后面的括號(hào)可以省略。但算類(lèi)型長(zhǎng)度的時(shí)候不能省,這是語(yǔ)法要求。

下面就是sizeof一些常用的用法

#include<stdio.h>
int main()
{
	//sizeof
	int a = 10;
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof(float));
	printf("%d\n", sizeof(double));
 
	int arr[10] = { 1,2,3,4,5,6,7 };
	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(int[10]));//計(jì)算整個(gè)數(shù)組的長(zhǎng)度
 
	printf("%d\n", sizeof a);
	//printf("%d\n", sizeof int);這樣寫(xiě)是會(huì)報(bào)錯(cuò)的
 
 
	return 0;
}

計(jì)算出的結(jié)果如下:

2.~

~的主要作用就是對(duì)一個(gè)數(shù)的二進(jìn)制按位取反,但同樣的,最后打印出來(lái)的是原碼

#include<stdio.h>
int main()
{
    int a = 0;
	//~按(內(nèi)存中補(bǔ)碼的2進(jìn)制)位取反
	//00000000000000000000000000000000
	//11111111111111111111111111111111 - 補(bǔ)碼
	//11111111111111111111111111111110 - 反碼
	//10000000000000000000000000000001 - 原碼 --> -1
 
	printf("%d\n", ~a);
 
	return 0;
}

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

 這里有個(gè)~的應(yīng)用:

怎樣將一個(gè)數(shù)進(jìn)行復(fù)原

#include<stdio.h>
int main()
{
    int a = 10;
	a |= (1 << 2);
	printf("%d\n", a);
	a &= ~(1 << 2);
	printf("%d\n", a);
    return 0;
 
	//如果只想把倒數(shù)第三個(gè)數(shù),也就是0改為1,可以進(jìn)行以下操作
	//00000000000000000000000000001010
	//00000000000000000000000000000100   1<<2(用a與1<<2異或來(lái)實(shí)現(xiàn))
	//00000000000000000000000000001110
	//11111111111111111111111111111011   ~(1<<2)(要想將a復(fù)原,就是再將倒數(shù)第三個(gè)數(shù)變?yōu)?)
	//00000000000000000000000000001010
}

3.++與--

這里主要注意的是分前置與后置

前置++/--:先加/減再使用

后置++/--:先使用再加/減 

a每加一次就會(huì)記錄,總共加了兩次,所以是3。

對(duì)于b,先使用了a的值再對(duì)a進(jìn)行++,所以是1.

到c這里,a實(shí)際上已經(jīng)變成2了,而c是先對(duì)a進(jìn)行加1再用它的值,所以c為3。

4.*(解引用操作符)

#include<stdio.h>
int main()
{
    int a = 10;
	int* pa = &a;
	*pa = 20;//通過(guò)*來(lái)訪(fǎng)問(wèn)a的地址
	printf("%d\n", a);
	printf("%d\n", *pa);//此時(shí)的*pa就是a的值
 
	int* px = &*pa;//px通過(guò)*來(lái)訪(fǎng)問(wèn)*pa,也就是訪(fǎng)問(wèn)a
	*px = 30;
	printf("%d\n", a);
    return 0;
}

2.關(guān)系操作符

3.邏輯操作符

(只關(guān)注變量的真假)

來(lái)看一道360的筆試題,判斷一下程序輸出的結(jié)果是多少。

我們先來(lái)看下第一種,a是先使用再進(jìn)行++,這里a是0,是0則為假,那么后面的就都不要看了,還是原來(lái)的結(jié)果,但a進(jìn)行了++ 

 再看第二種,先打個(gè)比方,我想讓張三或者李四,一個(gè)來(lái)我辦公室,張三來(lái)了,那李四來(lái)不來(lái)就已經(jīng)無(wú)所謂了,這里也是一樣,a先使用再++,則a=0,表示沒(méi)有人來(lái),沒(méi)人來(lái)就繼續(xù)進(jìn)行,b是先++再使用,b=3,為真,就是有人來(lái)了,有人來(lái)了以后,后面的來(lái)不來(lái)都無(wú)所謂,所以d就不再進(jìn)行,最后輸出的結(jié)果就是1334.

 (做個(gè)小總結(jié):&&---左操作數(shù)為假,右邊不計(jì)算     ||---左操作數(shù)為真,右邊不計(jì)算)

4.條件操作符

(也叫三目操作符--->exp1 ? exp2 : exp3 )

#include<stdio.h>
int main()
{
    int a = 10;
	int b = 20;
	int max = 0;
	/*if (a > b)
		max = a;
	else
		max = b;*/
 
	max = (a > b ? a : b);//與上面那段代碼等價(jià)
    return 0;
}

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

逗號(hào)表達(dá)式,就是用逗號(hào)隔開(kāi)的多個(gè)表達(dá)式。 逗號(hào)表達(dá)式從左向右依次執(zhí)行。整個(gè)表達(dá)式的結(jié)果是最后一個(gè)表達(dá)式的結(jié)果。 首先,我們來(lái)分析一個(gè)代碼: 下面輸出的c是多少?

    int a = 1;
	int b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);

我們來(lái)看括號(hào)里面的式子,像a>b、a這樣子的對(duì)a和b毫不起作用,可以直接忽略掉,然后a=b+10,這里a變成了12,最后b=a+1=13.所以結(jié)果是13.

不難發(fā)現(xiàn),最后起作用的是最后一個(gè)表達(dá)式的結(jié)果。

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

1. [  ] 下標(biāo)引用操作符

操作數(shù):一個(gè)數(shù)組名+一個(gè)索引值

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

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

#include<stdio.h>
 
void menu()
{
    printf("*************************\n");
	printf("******    hello    ******\n");
	printf("******   friends   ******\n");
	printf("*************************\n");
}
 
int main()
{
    menu();
    return 0;
}

 3.訪(fǎng)問(wèn)一個(gè)結(jié)構(gòu)的成員

. 結(jié)構(gòu)體.成員名

-> 結(jié)構(gòu)體指針->成員名

#include<stdio.h>
 
struct Stu
{
    char name[10];
    int age;
    double score;
};
 
int main()
{
    struct Stu s = { "zhangsan",20,85.5 };
	//.
	printf("%s %d %.1lf\n", s.name, s.age, s.score);
	//->
	struct Stu* ps = &s;
	printf("%s %d %.1lf\n", (*ps).name, (*ps).age, (*ps).score);
	printf("%s %d %.1lf\n", ps->name, ps->age, ps->score);
    return 0;
}

這三種情況輸出的結(jié)果一樣,感興趣的同學(xué)可以自己去試一下!

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

例如:

#include<stdio.h>
int main()
{
    short s = 20;
	int a = 5;
	printf("%d\n", sizeof(s = a + 4));
	printf("%d\n", s);
    return 0;
}

sizeof輸出的結(jié)果是2,這里面int型的a被轉(zhuǎn)化為short型。

8.操作符的屬性

復(fù)雜表達(dá)式的求值有三個(gè)影響的因素:

1.操作符的優(yōu)先級(jí)

2.操作符的結(jié)合性

3.是否控制求值順序

兩個(gè)相鄰的操作符先執(zhí)行哪個(gè),取決于他們的優(yōu)先級(jí)。如果兩者的優(yōu)先級(jí)相同,取決于他們的結(jié)合性。

// 表達(dá)式的求值部分由操作符的優(yōu)先級(jí)決定。

// 表達(dá)式 1

a * b + c * d + e * f

在計(jì)算的時(shí)候,由于*比+的優(yōu)先級(jí)高,只能保證,*的計(jì)算是比+早,但是優(yōu)先級(jí)并不

能決定第三個(gè) * 比第一個(gè) + 早執(zhí)行。

// 表達(dá)式2

c + -- c ;

同上,操作符的優(yōu)先級(jí)只能決定自減-- 的運(yùn)算在 + 的運(yùn)算的前面,但是我們并沒(méi)有辦法得 知,+操作符的左操作數(shù)的獲取在右操作數(shù)之前還是之后求值,所以結(jié)果是不可預(yù)測(cè)的,是有歧義 的。

// 代碼 3- 非法表達(dá)式
int main ()
{
int i = 10 ;
i = i -- - -- i * ( i = - 3 ) * i ++ + ++ i ;
printf ( "i = %d\n" , i );
return 0 ;
}

我們?cè)趯?xiě)代碼的時(shí)候,難免會(huì)為一些小細(xì)節(jié)而頭痛,只有在我們熟練掌握這些知識(shí)的時(shí)候才能避免這些尷尬的小問(wèn)題,希望操作符詳解能對(duì)你有些幫助!

到此這篇關(guān)于C語(yǔ)言各種操作符透徹理解下篇的文章就介紹到這了,更多相關(guān)C語(yǔ)言 操作符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • opencv利用視頻的前n幀求平均圖像

    opencv利用視頻的前n幀求平均圖像

    這篇文章主要為大家詳細(xì)介紹了opencv利用視頻的前n幀求平均圖像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語(yǔ)言控制臺(tái)實(shí)現(xiàn)字符飛機(jī)大戰(zhàn)

    C語(yǔ)言控制臺(tái)實(shí)現(xiàn)字符飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言控制臺(tái)實(shí)現(xiàn)字符飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語(yǔ)言之實(shí)現(xiàn)控制臺(tái)光標(biāo)隨意移動(dòng)的實(shí)例代碼

    C語(yǔ)言之實(shí)現(xiàn)控制臺(tái)光標(biāo)隨意移動(dòng)的實(shí)例代碼

    下面小編就為大家?guī)?lái)一篇C語(yǔ)言之實(shí)現(xiàn)控制臺(tái)光標(biāo)隨意移動(dòng)的實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • C語(yǔ)言運(yùn)用回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器

    C語(yǔ)言運(yùn)用回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言運(yùn)用回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++面向?qū)ο笾鄳B(tài)的實(shí)現(xiàn)和應(yīng)用詳解

    C++面向?qū)ο笾鄳B(tài)的實(shí)現(xiàn)和應(yīng)用詳解

    相信大家都知道面向?qū)ο蟮娜筇匦允欠庋b,繼承和多態(tài),下面這篇文章主要給大家介紹了關(guān)于C++面向?qū)ο笾鄳B(tài)的實(shí)現(xiàn)和應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-09-09
  • EasyC++單獨(dú)編譯

    EasyC++單獨(dú)編譯

    這篇文章主要介紹了EasyC++單獨(dú)編譯,在上一篇當(dāng)中,我們編寫(xiě)好了頭文件coordin.h,現(xiàn)在我們要完成它的實(shí)現(xiàn)。需要的小伙伴可以先學(xué)習(xí)上一篇內(nèi)容然后一起與小編一起進(jìn)入本篇內(nèi)容一起學(xué)習(xí)吧
    2021-12-12
  • 關(guān)于C語(yǔ)言 const 和 define 區(qū)別

    關(guān)于C語(yǔ)言 const 和 define 區(qū)別

    這篇文章主要介紹了關(guān)于C語(yǔ)言 const 和 define 區(qū)別 的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • C++設(shè)計(jì)模式之職責(zé)鏈模式

    C++設(shè)計(jì)模式之職責(zé)鏈模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之職責(zé)鏈模式,本文講解了什么是職責(zé)鏈模式、什么場(chǎng)合下使用、代碼實(shí)例等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C語(yǔ)言中幾種常量的認(rèn)識(shí)和理解

    C語(yǔ)言中幾種常量的認(rèn)識(shí)和理解

    這篇文章主要為大家介紹了C語(yǔ)言常量的認(rèn)識(shí)和理解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • C++?解決求兩個(gè)鏈表的第一個(gè)公共結(jié)點(diǎn)問(wèn)題

    C++?解決求兩個(gè)鏈表的第一個(gè)公共結(jié)點(diǎn)問(wèn)題

    本文主要介紹了利用C++實(shí)現(xiàn)輸入兩個(gè)無(wú)環(huán)的單向鏈表時(shí),找出它們的第一個(gè)公共結(jié)點(diǎn)的問(wèn)題。文章中的示例代碼簡(jiǎn)潔易懂,感興趣的同學(xué)可以和小編一起學(xué)習(xí)一下
    2021-12-12

最新評(píng)論

万州区| 横山县| 体育| 淮滨县| 望江县| 武威市| 上饶市| 平江县| 宝清县| 龙海市| 鱼台县| 尚义县| 东至县| 马鞍山市| 武定县| 体育| 莫力| 株洲市| 历史| 碌曲县| 祥云县| 泰安市| 霍州市| 广安市| 湘阴县| 咸宁市| 开阳县| 天长市| 巴南区| 台中县| 东阿县| 盐城市| 萨迦县| 莱芜市| 丁青县| 苗栗市| 班玛县| 渭源县| 怀来县| 榕江县| 井陉县|