作者前言
??? ? ? ? ??????????????????????
? ??? ? ? ?作者介紹:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????
? ? ? ??? ??????????????? ? ? ? ? ? ? ??
? ? ? ? ? ??作者id:老秦包你會(huì),? ? ? ? ???
簡(jiǎn)單介紹:??????????????????????????????
? ? ? ? ? ? ?喜歡學(xué)習(xí)C語(yǔ)言和python等編程語(yǔ)言,是一位愛(ài)分享的博主,有興趣的小可愛(ài)可以來(lái)互討? ? ? ? ?????????????????
? ? ? ? ? ? ? ? ???個(gè)人主頁(yè)::小小頁(yè)面??
? ? ? ? ? ? ? ? ? ??gitee頁(yè)面:秦大大??
???????????????????????????????????
? ? ? ? ??? 一個(gè)愛(ài)分享的小博主 歡迎小可愛(ài)們前來(lái)借鑒??
_______________________________________________________
______________________________________________________________________
目錄
????????條件操作符
????????逗號(hào)表達(dá)式
????????下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員
——————————————————————————————————————
插播小知識(shí)
1.%u?十進(jìn)制無(wú)符號(hào)整數(shù)
%d把對(duì)應(yīng)的整數(shù)按有符號(hào)十進(jìn)制輸出,%u把對(duì)應(yīng)的整數(shù)按無(wú)符號(hào)十進(jìn)制輸出,比如printf("%d,%u\n",-123,-123);,輸出則是-123,4294967173——因?yàn)?123的補(bǔ)碼是11111111111111111111111110000101,在%u控制下把它當(dāng)正數(shù)輸出了。
?條件操作符(三目操作符)
#include <stdio.h>
int main()
{
int a = 10;
int b = 2;
int m = 0;
/*if (a > b)
m = a;
else
m = b;*/
m = (a > b ? a : b);
printf("%d", m);
return 0;
}
逗號(hào)表達(dá)式
exp1, exp2, exp3, …expN
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = (a = 2 + b, b = a + b);
printf("%d %d %d", a, b, c);
return 0;
}
從左到右執(zhí)行下去,直到最后一個(gè)表達(dá)式
下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員
[ ] 下標(biāo)引用操作符
#include <stdio.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
printf("%d", arr[2]);
return 0;
}
[]的操作數(shù)是arr 和2
( ) 函數(shù)調(diào)用操作符
#include <stdio.h>
int Add(int a, int b)
{
return a + b;
}
int main()
{
int a = 0;
int b = 2;
Add(a, b);//()函數(shù)調(diào)用操作符
return 0;
}
訪問(wèn)一個(gè)結(jié)構(gòu)的成員
#include <stdio.h>
struct book
{
char name[20];
int price;
};
int main()
{
struct book b = { "明解C語(yǔ)言", 55 };
printf("%s\n", b.name);
struct book* pb = &b;
printf("%s\n", pb -> name);
printf("%s\n", (*pb).name);
return 0;
}
表達(dá)式求值
隱式類型轉(zhuǎn)換
1.整形提升(運(yùn)用于小于一個(gè)int 大小的數(shù)值)
// 負(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
int main()
{
char a = 0xb6;
short b = 0xb600;
int c = 0xb6000000;
if(a==0xb6)
printf("a");
if(b==0xb600)
printf("b");
if(c==0xb6000000)
printf("c");
return 0;
}
我們只需要知道小于int大小的數(shù)值要整形提升
#include <stdio.h>
int main()
{
char a = 1;// 00000000000000000000000000000001 補(bǔ)碼 ---a存儲(chǔ)的只有00000001
char b = 30;// 00000000000000000000000000011110 補(bǔ)碼 ----b存儲(chǔ)的只有00011110
char c = a + b;// 參與了運(yùn)算
//a整形提升為 00000000000000000000000000000001
//b整形提升為 00000000000000000000000000011110
// 結(jié)果 00000000000000000000000000011111
//00011111 -char c存儲(chǔ)的8個(gè)bit
//c整形提升 00000000000000000000000000011111 --->補(bǔ)碼
//最終原碼為 00000000000000000000000000011111
printf("%d", c);
return 0;
}
所以我們可以理解為當(dāng)字符或者其他小于int長(zhǎng)度的,在參與運(yùn)算或者判斷又或者配合某些操作符就會(huì)發(fā)生整形提升,提升到4個(gè)字節(jié),否則原來(lái)是多少字節(jié)就是多少字節(jié)
2.算術(shù)轉(zhuǎn)換(用于大小大于或者等于int 大小的數(shù)組)

?
操作符的屬性
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
//優(yōu)先級(jí)
b = 9 + 5 * 6;
//結(jié)合性
b = 6 + 5 + 3;
return 0;
}
在相鄰操作符不一樣的時(shí)候,先考慮優(yōu)先級(jí)
相鄰操作符相同時(shí),考慮結(jié)合性
結(jié)合性就是計(jì)算方向
#include <stdio.h>
int main()
{
int i = 1;
int ret = (++i) + (++i) + (++i);
printf("%d\n", ret);
printf("%d\n", i);
return 0;
}
這個(gè)代碼在不同編譯器結(jié)果不一樣,所以這個(gè)代碼的寫(xiě)法不行,我們可以看看vs編譯器是怎樣運(yùn)行的,我們看看反匯編
mov :是把后面的值存放到前面去, 把1存放到dword ptr[i]
add:增加文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-630897.html
eax、ecx、都是寄存器文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-630897.html
到了這里,關(guān)于C語(yǔ)言第十二課---------操作符的介紹與使用(下)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!