摘要:毋庸置疑,運(yùn)算符號(hào)操作符就是進(jìn)行語言的一些運(yùn)算的,這些運(yùn)算符雖然你在學(xué)語言的時(shí)候很不起眼,而在有些題目上還不讓用這些操作符來做題,但是,當(dāng)你用到他們的時(shí)候,他們會(huì)給你意想不到的幫助。
目錄
C語言操作符指的是運(yùn)算符號(hào)。毋庸置疑,運(yùn)算符號(hào)(操作符)就是進(jìn)行c語言的一些運(yùn)算的,這些運(yùn)算符雖然你在學(xué)c語言的時(shí)候很不起眼,而在有些題目上還不讓用這些操作符來做題,但是,當(dāng)你用到他們的時(shí)候,他們會(huì)給你意想不到的幫助。
C語言中的符號(hào)分為10類:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位操作運(yùn)算符、賦值運(yùn)算符、條件運(yùn)算符、逗號(hào)運(yùn)算符、指針運(yùn)算符、求字節(jié)數(shù)運(yùn)算符和特殊運(yùn)算符
所謂優(yōu)先級(jí):就是計(jì)算的順序,在數(shù)學(xué)中有這么一個(gè)說法,就是先計(jì)算括號(hào)里面的,在計(jì)算外面的,先計(jì)算乘法除法,在計(jì)算加法減法。
優(yōu)先級(jí)順序:(這里的優(yōu)先順序估計(jì)一般人是記不住的,這些都是在百度上搜索的,大家可以當(dāng)做筆記或者字典來看,找到自己不會(huì)的點(diǎn)學(xué)就完了)。
?1、優(yōu)先級(jí)1級(jí)
結(jié)合方向 左結(jié)合(自左至右)
( ) 圓括號(hào)
-> 指向結(jié)構(gòu)體成員運(yùn)算符
. 結(jié)構(gòu)體成員運(yùn)算符?[1]?(請注意它是一個(gè)實(shí)心圓點(diǎn))
2、優(yōu)先級(jí)2級(jí)
結(jié)合方向 右結(jié)合(自右至左)單目運(yùn)算符
! 邏輯非運(yùn)算符
~ 按位取反運(yùn)算符
++ 自增運(yùn)算符
-- 自減運(yùn)算符
-?負(fù)號(hào)運(yùn)算符
(類型) 類型轉(zhuǎn)換運(yùn)算符
* 指針運(yùn)算符
& 地址與運(yùn)算符
3、優(yōu)先級(jí)3級(jí)
結(jié)合方向 左結(jié)合 雙目運(yùn)算符
* 乘法運(yùn)算符
/ 除法運(yùn)算符
4、優(yōu)先級(jí)4級(jí)
結(jié)合方向 左結(jié)合 雙目運(yùn)算符
+ 加法運(yùn)算符
5、優(yōu)先級(jí)5級(jí)
結(jié)合方向 左結(jié)合 雙目運(yùn)算符
<< 左移運(yùn)算符
6、優(yōu)先級(jí)6級(jí)
結(jié)合方向 左結(jié)合 雙目運(yùn)算符
7、優(yōu)先級(jí)7級(jí)
結(jié)合方向 左結(jié)合 雙目運(yùn)算符
== 等于運(yùn)算符 (判斷)
8、優(yōu)先級(jí)8級(jí)
結(jié)合方向 左結(jié)合 雙目運(yùn)算符
9、優(yōu)先級(jí)9級(jí)
結(jié)合方向 左結(jié)合 雙目運(yùn)算符
10、優(yōu)先級(jí)10級(jí)
結(jié)合方向 左結(jié)合 雙目運(yùn)算符
| 按位或運(yùn)算符 舉例:0xfe|0xef 即為1111 1110 與1110 1111按位或運(yùn)算則答案為:1111 1111 即0xff。
11、優(yōu)先級(jí)11級(jí)
結(jié)合方向 左結(jié)合 雙目運(yùn)算符
12、優(yōu)先級(jí)12級(jí)
結(jié)合方向 左結(jié)合 雙目運(yùn)算符
13、優(yōu)先級(jí)13級(jí)
結(jié)合方向 右結(jié)合 三目運(yùn)算符
? :?條件運(yùn)算符
14、優(yōu)先級(jí)14級(jí)
結(jié)合方向 右結(jié)合 雙目運(yùn)算符
+ = 加后賦值運(yùn)算符 如s+=1表示s=s+1
- = 減后賦值運(yùn)算符 如s-=1表示s=s-1
* = 乘后賦值運(yùn)算符
/ = 除后賦值運(yùn)算符
% = 取模后賦值運(yùn)算符
< <= 左移后賦值運(yùn)算符
>>=右移后賦值運(yùn)算符
&= 按位與后賦值運(yùn)算符
^=按位異或后賦值運(yùn)算符
15、優(yōu)先級(jí)15級(jí)
結(jié)合方向 左結(jié)合
+? (進(jìn)行加法運(yùn)算)???-(進(jìn)行減法運(yùn)算)? ? ? ?*(在c語言中*代表是乘法)
/(在c語言中/代表除法):
對于除法運(yùn)算,如果兩個(gè)數(shù)都是整數(shù)的話(即整數(shù)除法),則結(jié)果為整數(shù),如果兩個(gè)數(shù)有一個(gè)數(shù)為浮點(diǎn)數(shù),則結(jié)果就為小數(shù)
#include
int main(){ int a1 = 10 / 2; float a2 = 10 / 2.0; printf("%d/n", a1); printf("%f", a2); return 0;} %(在C語言中不是百分號(hào)這個(gè)是取模操作符)
取模操作符計(jì)算的是整數(shù)不能是小數(shù),其中結(jié)果為余數(shù)。
移位操作符:移位是某數(shù)在內(nèi)存中存儲(chǔ)的二進(jìn)制位。
分類:左移操作符< ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?右移操作符>>
左移操作符<<
左移操作符是將數(shù)字在內(nèi)存中存儲(chǔ)的二進(jìn)制位向左移位。
先給大家講講進(jìn)制吧
進(jìn)制也就是進(jìn)位計(jì)數(shù)制,是人為定義的帶進(jìn)位的計(jì)數(shù)方法(有不帶進(jìn)位的計(jì)數(shù)方法,比如原始的結(jié)繩計(jì)數(shù)法,唱票時(shí)常用的“正”字計(jì)數(shù)法,以及類似的tally mark計(jì)數(shù))。 對于任何一種進(jìn)制---X進(jìn)制,就表示每一位上的數(shù)運(yùn)算時(shí)都是逢X進(jìn)一位。?十進(jìn)制是逢十進(jìn)一,十六進(jìn)制是逢十六進(jìn)一,二進(jìn)制就是逢二進(jìn)一,以此類推,x進(jìn)制就是逢x進(jìn)位。
進(jìn)制的分類
16進(jìn)制(0~15)? ? ? 8進(jìn)制(0~7)? ? ? ? ? 2進(jìn)制(0~1)
進(jìn)制的表示形式:二進(jìn)制以0b開頭,八進(jìn)制以0開頭,16進(jìn)制以0x開頭
由于在計(jì)算機(jī)存儲(chǔ)的是二進(jìn)制我們具體給大家講二進(jìn)制其他進(jìn)制可以類比
由于二進(jìn)制只有0和1,逢2進(jìn)一,從右面開始,右面第一位是2^0,第二位是2^1,依次類推
?那我們拿5來舉例 5就是(前面的0省略),101(4+0+1=5);
這樣也就會(huì)了。
好接著我們來講左移操作符
還是拿5來舉例
?所以顯然左移操作符的作用是向左移動(dòng)二進(jìn)制位左邊丟棄右邊補(bǔ)0
用代碼這么表示? ? int a= a <<1;
那我們在進(jìn)行移位操作的時(shí)候a本身有沒有變呢???
int main(){ int a = 5; int b = a << 1; printf("%d/n", a); printf("%d/n", b); return 0;}
?顯然a本身沒有變因?yàn)樽笠浦皇且环N運(yùn)算操作不會(huì)改變其地址;
講右移操作符之前先給大家普及一個(gè)小知識(shí),我們整數(shù)在內(nèi)存中存儲(chǔ)都是補(bǔ)碼,那什么是補(bǔ)碼呢??
說補(bǔ)碼那就不得不說原碼和反碼
原碼是啥呢?原碼就是一個(gè)整數(shù)本身的二進(jìn)制 ,比如5的原碼就是101,又由于正數(shù)的原碼補(bǔ)碼反碼都相同所以補(bǔ)碼也是101。
先說一下從原碼到補(bǔ)碼的運(yùn)算過程——是這樣運(yùn)算的原碼——>反碼——>補(bǔ)碼
原碼變反碼是符號(hào)位不變剩下的所有位按位取反(0變1,1變0),反碼變補(bǔ)碼是反碼+1就是補(bǔ)碼。
所謂右移操作符就是二進(jìn)制位向右移位
右移操作符分為兩種運(yùn)算,一種是算術(shù)右移,第二種是邏輯右移,具體哪種運(yùn)算就取決于編譯器進(jìn)行哪種運(yùn)算了(vs編譯器采用的是算術(shù)右移)
算術(shù)右移:右邊丟棄,左邊額補(bǔ)原來的符號(hào)位
邏輯右移:右邊丟棄,左邊補(bǔ)0
需要注意的是正數(shù)的原碼補(bǔ)碼反碼相同,而負(fù)數(shù)的原碼補(bǔ)碼反碼需要計(jì)算,因?yàn)橥ǔT趦?nèi)存中存儲(chǔ)的是二進(jìn)制補(bǔ)碼,而在打印的時(shí)候或者使用的時(shí)候我們用的是原碼,這時(shí)候,我們就需要將補(bǔ)碼變成原碼,怎么變呢??那當(dāng)時(shí)剛才的反過來,補(bǔ)碼變反碼,那就是二進(jìn)制位減一,反碼變原碼符號(hào)位不變其他位按位取反。
當(dāng)我們進(jìn)行左移或者右移的時(shí)候一定先轉(zhuǎn)化為原來二進(jìn)制的補(bǔ)碼在進(jìn)行移位操作
給大家舉個(gè)例子
位操作符有&(按位與)|(按位或)^(按位異或)
按位與:我是這么理解的,比如我與你肯定是你和我必須都存在,所以只有兩個(gè)都為1時(shí)才為1
按位或:或就是只要有一個(gè)就行,也就是兩個(gè)當(dāng)中有1個(gè)為1才為1
按位異或:相同為0,相異為1
交換兩個(gè)數(shù)(不允許創(chuàng)作臨時(shí)變量)
我們都知道有這些操作符但都不知道該怎么應(yīng)用,接下來我們進(jìn)行按位異或的應(yīng)用
首先先提個(gè)問題b^b=多少呢??
^(按位異或是相同為0相異為1),那可知b^b就應(yīng)該是0了,那下面的代碼你就應(yīng)該可以理解了
#include
int main(){ int a = 10; int b = 20; a = a^b; b = a^b; a = a^b; printf("a = %d b = %d/n", a, b); return 0;} 這里的b=a^b^b就是b=a;而a=a^a^b(就是a=b)。
賦值操作符
賦值就是把一個(gè)變量變成你想要的結(jié)果
我們通常用的賦值號(hào)就是=(值得注意的是==是相等,=是賦值)
復(fù)合賦值符+= -= *= /= %= >>= <<= &= |= ^=
但賦值時(shí)左值必須是一塊空間比如int
右值是一個(gè)值或者一塊空間的內(nèi)容
注意:當(dāng)我們用復(fù)合賦值符的時(shí)候盡量不要寫成連等例如y=b+2=c,這樣就讓人看不懂你的代碼可讀性就大大降低,所以我們寫代碼一定寫著清晰明了,讓別人看代碼一目了然。
! ? ? ? ? ? 邏輯反操作
什么是邏輯反操作?
反操作其實(shí)就是把真的改成假的,假的改成真的
#include
int main(){ int flag = 1;//1代表真 if (!flag)//!flag就代表假 { printf("1/n"); } else { printf("2/n"); } return 0;} - ? ? ? ? ? 負(fù)值
+ ? ? ? ? ? 正值
這里的正負(fù)值就是我們說的正負(fù)號(hào)也不用多說,因?yàn)檫@里是單目操作符,所以不要理解為加號(hào)和減號(hào),比如加號(hào)兩邊是有兩個(gè)操作數(shù)所以是雙目操作符。
& ? ? ? ? ? 取地址
取地址符號(hào)就是取出變量的地址
#include
int main(){ int a = 10; //int* p = &a;//這里存放地址的變量叫做指針變量,其中int*是類型 printf("%p/n", &a);//取出a變量的地址 return 0;} sizeof ? ? ?操作數(shù)的類型長度(以字節(jié)為單位)
sizeof用來求數(shù)據(jù)類型或者變量的大小
#include
int main(){ int a = 2; printf("%d/n", sizeof(a));//計(jì)算變量a的大小 printf("%d/n", sizeof(int));//計(jì)算int類型的大小必須加() printf("%d/n", sizeof a);//計(jì)算變量a的大小 printf("%d/n", sizeof int);//計(jì)算int類型的大小必須加(),這里就會(huì)報(bào)錯(cuò) return 0;} ~ ? ? ? ? ? 對一個(gè)數(shù)的二進(jìn)制按位取反
#include
int main(){ //按位取反 ~ //比如5 //5 的二進(jìn)制位 00000000000000000000000000000101 // 按位取反 11111111111111111111111111111010 int a = 5; printf("%d/n", ~a); return 0;} 前置--:先--在使用
#include
int main(){ //前置--先--在使用 int a = 10; int b = --a; printf("%d/n", a); printf("%d/n", b); return 0;} ?
結(jié)果為啥是9 9呢?
我們這里是這樣操作的, 先--(就是a先--所以a變成9),在使用(把a(bǔ)=9賦給b);
后置--
#include
int main(){ //后置--先使用在-- int a = 10; int b = a--; printf("%d/n", a); printf("%d/n", b); return 0;} ?先使用(先把a(bǔ)=10賦給b所以b=10),在--(a--變成a=9);
前置++
#include
int main(){ //前置++先++在使用 int a = 10; int b = ++a; printf("%d/n", a); printf("%d/n", b); return 0;} ?先++(a先自己增加1所以a=11),在使用(把a(bǔ)=11賦給b,所以b=11);
后置++
#include
int main(){ //z后置++先使用在++ int a = 10; int b = a++; printf("%d/n", a); printf("%d/n", b); return 0;} 先使用(先將a=10賦給b,所以b=10),在++(a自己增加1,所以a=11)。
++,--總結(jié):
如果是前置就先給自己增加或者減少,在賦值,如果是后置先把原來的值賦值在進(jìn)行++或者--;
* ? ? ? ? ? 間接訪問操作符(解引用操作符)
#include
int main(){ int a = 10; int *p = &a;//指針變量p取出a的地址 *p = 20;//*p就是把存放a的地址解引用了,這里的*p就是原來的a, //這里是間接訪問把原來的a=10改成20 return 0;} (類型) ? ? ? 強(qiáng)制類型轉(zhuǎn)換
強(qiáng)制類型轉(zhuǎn)換就是把原本你不是這個(gè)常量屬于的類型,強(qiáng)制轉(zhuǎn)成某個(gè)類型
#include
int main(){ int a = (int)3.14;//把原本屬于double類型的強(qiáng)制轉(zhuǎn)換成int類型 printf("%d/n", a); //在比如隨機(jī)數(shù)種子 //srand((unsigned int)time(NULL)); return 0;}
這個(gè)我們前面也講過了,這里在復(fù)習(xí)下
我們講了有兩種特殊情況一種是sizeof(arr)計(jì)算的是整個(gè)數(shù)組的大小,一種是&arr指的的是整個(gè)數(shù)組的大小,剩下的都指的是數(shù)組首元素的地址。
#includeint main(){ int arr[5] = { 0,1,2,3,4 }; printf("%d/n", sizeof(arr)); return 0;}
當(dāng)我們傳參的時(shí)候
#include
void test1(int arr[]){ printf("%d/n", sizeof(arr));//數(shù)組傳參,大小為指針的大小為4}void test2(char ch[]){ printf("%d/n", sizeof(ch));//數(shù)組傳參,大小為指針的大小為4}int main(){ int arr[10] = { 0 }; char ch[10] = { 0 }; printf("%d/n", sizeof(arr));//計(jì)算的是整個(gè)數(shù)組大小為10*4 printf("%d/n", sizeof(ch));//計(jì)算的是真?zhèn)€字符數(shù)組的大小為10*1 test1(arr); test2(ch); return 0;} 當(dāng)我們進(jìn)行數(shù)組傳參的時(shí)候傳的是地址也就是指針?biāo)源笮?個(gè)字節(jié)
還要注意當(dāng)我們想要計(jì)算整個(gè)數(shù)組大小的時(shí)候一定要main函數(shù)內(nèi)部計(jì)算
>
>=
<
<=
!= ? 用于測試“不相等”
== ? ? ?用于測試“相等(經(jīng)常在判斷時(shí)候使用,一定要和=(賦值號(hào))區(qū)分開)。
&& ? ? 邏輯與 ? ? ? ? ? ? ? || ? ? ?邏輯或
這兩雖然是與前面按位與&,按位或|,意思相同
兩者區(qū)別是按位與和按位或是與二進(jìn)制的計(jì)算有關(guān)
而邏輯與和邏輯或是進(jìn)行判斷的
舉個(gè)例子
#includeint main(){ //判斷一個(gè)人的年齡處于什么狀態(tài) int age = 0; scanf("%d", &age); if (0 < age < 18) { printf("未成年/n"); } else { printf("成年/n"); } return 0;}
這個(gè)代碼對么????
根據(jù)輸出結(jié)果判斷這個(gè)代碼肯定是錯(cuò)的,那這里為啥會(huì)錯(cuò)呢?這不應(yīng)該和數(shù)學(xué)上是一樣的么?
在這個(gè)代碼是這樣理解的,你輸入25,進(jìn)入if語句就判斷左半部分0<25結(jié)果為真,又25>18結(jié)果為真,所以判斷為真,輸出未成年。
那我們怎樣才能正確表示呢?這時(shí)邏輯操作符就派上用場了
#include
int main(){ //判斷一個(gè)人的年齡處于什么狀態(tài) int age = 0; scanf("%d", &age); if (age>=0&&age<=18) { printf("未成年/n"); } else { printf("成年/n"); } 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/nd = %d/n", a, b, c, d); return 0;}//程序輸出的結(jié)果是什么 這個(gè)題如何考慮呢?
首先i=a++(后置++,先使用后++),這里先使用a=0&&++b為假所以++b不在計(jì)算,又0&&d++為假不計(jì)算,在打印的時(shí)候a在使用a++(a=1),其他的不計(jì)算所以計(jì)算結(jié)果為1234.
?
#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/nd = %d/n", a, b, c, d); return 0;}//程序輸出的結(jié)果是什么 這回我們把i換了,這回結(jié)果又是什么呢
首先a++,a不變,這時(shí)候變?yōu)閍或什么,0||++b,結(jié)果為真所以b=3,c不變,前面是真,真或上啥都為真,d++不計(jì)算,最后打印a使用(a=1),所以結(jié)果我1334.
exp1 ? exp2 : exp3? ?解釋:表達(dá)式一成立則執(zhí)行表達(dá)式二,輸出表達(dá)式二結(jié)果,不成立執(zhí)行表達(dá)式三,輸出表達(dá)式三結(jié)果。
#includeint main(){ //舉例判斷兩個(gè)數(shù)的大小然后輸出大的數(shù) int a = 10; int b = 20; /*if (a > b) { printf("%d/n", a); } else { printf("%d/n", b); }*/ //利用條件操作符 int ret = (a > b ? a : b);//a>b成立執(zhí)行a,不成立則執(zhí)行b。 printf("%d/n", ret); return 0;}
exp1, exp2, exp3, …expN
逗號(hào)表達(dá)式,就是用逗號(hào)隔開的多個(gè)表達(dá)式。
逗號(hào)表達(dá)式,從左向右依次執(zhí)行。整個(gè)表達(dá)式的結(jié)果是最后一個(gè)表達(dá)式的結(jié)果。
?逗號(hào)表達(dá)式雖然執(zhí)行表達(dá)式最后的結(jié)果但前面兩個(gè)表達(dá)式也是缺一不可的,前面兩個(gè)表達(dá)式要進(jìn)行運(yùn)算操作。
下標(biāo)引用操作符常用于數(shù)組
#include
int main(){ //創(chuàng)建一個(gè)結(jié)構(gòu)體變量 //以一個(gè)學(xué)生為例 struct stu { int height;//身高 int weight;//體重 }; struct stu stu = {180,120}; struct stu* ps = &stu; //printf("身高:%d/n體重:%d", s.height, s.weight);//.操作符為結(jié)構(gòu)體成員訪問操作符 printf("身高:%d/n體重:%d/n", (*ps).height, (*ps).weight);//結(jié)構(gòu)體指針訪問結(jié)構(gòu)體成員 printf("身高:%d/n體重:%d", ps->height, ps->weight);// 結(jié)構(gòu)體指針->結(jié)構(gòu)體成員名 return 0;} 總結(jié):結(jié)構(gòu)體訪問
結(jié)構(gòu)體.結(jié)構(gòu)體成員名
結(jié)構(gòu)體指針->結(jié)構(gòu)體成員
表達(dá)式求值的定義:表達(dá)式求值的順序一部分是由操作符的優(yōu)先級(jí)和結(jié)合性決定。 同樣,有些表達(dá)式的操作數(shù)在求值的過程中可能需要轉(zhuǎn)換為其他類型。
整形提升
什么是整形提升呢?
官方定義:C的整型算術(shù)運(yùn)算總是至少以缺省整型類型的精度來進(jìn)行的。 為了獲得這個(gè)精度,表達(dá)式中的字符和短整型操作數(shù)在使用之前被轉(zhuǎn)換為普通整型,這種轉(zhuǎn)換稱為整型 提升。
當(dāng)我們進(jìn)行比較低的類型進(jìn)行計(jì)算的時(shí)候,由于計(jì)算機(jī)無法實(shí)現(xiàn)這種低的類型計(jì)算,計(jì)算機(jī)常常把類型轉(zhuǎn)換成整形進(jìn)行計(jì)算
我們來舉幾個(gè)例子
比如我們要進(jìn)行char和char類型的計(jì)算
#includeint main(){ char a = 5; //a的二進(jìn)制 //00000000000000000000000000000101 //由于char類型是一個(gè)字節(jié)只能存放8個(gè)比特位所以需要截?cái)?//00000101 char b = 126; //00000000000000000000000001111110 //char類型進(jìn)行截?cái)?//01111110 char c = a + b; //當(dāng)我們進(jìn)行a+b時(shí)候由于計(jì)算機(jī)無法實(shí)現(xiàn)char類型的計(jì)算 //這時(shí)我們就需要進(jìn)行整形提升 //那怎樣整形提升呢?? //整形提升是按照變量的數(shù)據(jù)類型的符號(hào)位來提升 //所以我們補(bǔ)符號(hào)位 //a為00000000000000000000000000000101 //b為00000000000000000000000001111110 //兩者相加 //c變成10000011 //當(dāng)我們進(jìn)行打印的時(shí)候繼續(xù)整形提升 //整形提升后 //1111111111111111111111110000011--補(bǔ)碼 //又因?yàn)樵趦?nèi)存中存儲(chǔ)的是補(bǔ)碼而我們要的是原碼 //1111111111111111111111110000010--反碼 //1000000000000000000000001111101原碼 printf("%d/n", c); return 0;}
我們再舉個(gè)例子
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;}
?
這個(gè)例子就很明顯由于a和b都需要整形提升所以不可能是原來的值,而c就可以打印?
舉例
int main(){ char c = 1; printf("%u/n", sizeof(c)); printf("%u/n", sizeof(+c)); printf("%u/n", sizeof(-c)); return 0;}
?這個(gè)也會(huì)很好的能說明當(dāng)?shù)皖愋偷倪M(jìn)行計(jì)算的時(shí)候(表達(dá)式計(jì)算時(shí))也需要整形提升。
如果某個(gè)操作符的各個(gè)操作數(shù)屬于不同的類型,那么除非其中一個(gè)操作數(shù)的轉(zhuǎn)換為另一個(gè)操作數(shù)的類 型,否則操作就無法進(jìn)行。下面的層次體系稱為尋常算術(shù)轉(zhuǎn)換。
這個(gè)算術(shù)轉(zhuǎn)換適用于int類型以上的類型進(jìn)行轉(zhuǎn)換
long double
double
float
unsigned long int
long int
unsigned int
int
一般由低向高轉(zhuǎn)換
舉例
#includeint main(){ float f = 3.14; int num = f;//隱式轉(zhuǎn)換,會(huì)有精度丟失}
像這種如果要進(jìn)行計(jì)算的話int類型必須轉(zhuǎn)化成float類型才能進(jìn)行計(jì)算。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/123355.html
摘要:學(xué)習(xí)完多線程之后可以通過下面這些問題檢測自己是否掌握,下面這些問題的答案以及常見多線程知識(shí)點(diǎn)的總結(jié)在這里??蛇x數(shù)據(jù)結(jié)構(gòu)與算法如果你想進(jìn)入大廠的話,我推薦你在學(xué)習(xí)完基礎(chǔ)或者多線程之后,就開始每天抽出一點(diǎn)時(shí)間來學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問題,已經(jīng)開源,目前已經(jīng) 35k+ Star。會(huì)一直完善下去,歡迎建議和指導(dǎo),同時(shí)也歡迎Star: https://...
摘要:在位機(jī)器上,如果有個(gè)地址線,那一個(gè)指針變量的大小是個(gè)字節(jié),才能存放一個(gè)地址。就是一個(gè)指針變量,也有自己的類型,指針變量的類型我們可以發(fā)現(xiàn)指針的定義方式是類型星號(hào)。也就是說存儲(chǔ)什么變量類型就用什么指針變量類型。 ...
摘要:瀏覽器的主要組成包括有調(diào)用堆棧,事件循環(huán),任務(wù)隊(duì)列和。好了,現(xiàn)在有了前面這些知識(shí),我們可以看一下這道題的講解過程實(shí)現(xiàn)步驟調(diào)用會(huì)將函數(shù)放入調(diào)用堆棧。由于調(diào)用堆棧是空的,事件循環(huán)將選擇回調(diào)并將其推入調(diào)用堆棧進(jìn)行處理。進(jìn)程再次重復(fù),堆棧不會(huì)溢出。 JavaScript是前端開發(fā)中非常重要的一門語言,瀏覽器是他主要運(yùn)行的地方。JavaScript是一個(gè)非常有意思的語言,但是他有很多一些概念,大...
摘要:實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)這本書是目前點(diǎn)評推薦比較多的書,其特色是案例小,好實(shí)踐代碼有場景,實(shí)用。想要學(xué)習(xí)多線程的朋友,這本書是我大力推薦的,我的個(gè)人博客里面二十多篇的多線程博文都是基于此書,并且在這本書的基礎(chǔ)上進(jìn)行提煉和總結(jié)而寫出來的。 學(xué)習(xí)的最好途徑就是看書,這是我自己學(xué)習(xí)并且小有了一定的積累之后的第一體會(huì)。個(gè)人認(rèn)為看書有兩點(diǎn)好處:showImg(/img/bVr5S5); 1.能出版出...
摘要:當(dāng)這些隱藏于幕后的工作者處理完委托給它們的事件后,它們會(huì)觸發(fā)綁定在這些事件上的回調(diào)函數(shù)去通知。習(xí)慣回調(diào)是一個(gè)單線程事件驅(qū)動(dòng)的運(yùn)行環(huán)境,也就是說,在里,任何事都是對事件的響應(yīng)。 原文地址:https://codeburst.io/the-only-nodejs-introduction-youll-ever-need-d969a47ef219 作者:vick_onrails 摘要:這...
閱讀 2900·2021-11-15 11:39
閱讀 1888·2021-09-24 09:48
閱讀 1074·2021-09-22 15:36
閱讀 3599·2021-09-10 11:22
閱讀 3067·2021-09-07 09:59
閱讀 960·2021-09-03 10:28
閱讀 681·2021-09-02 15:15
閱讀 2750·2021-08-27 16:24