~在這里是按位取反的意思。
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)潞城,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
按位取反是C語言位操作的一種,其操作符為~。該操作為單目操作,即只有一個(gè)操作數(shù)。
~與其后的數(shù)值或變量相結(jié)合,執(zhí)行取反計(jì)算。
取反是按照二進(jìn)制位進(jìn)行計(jì)算的,當(dāng)原操作數(shù)的第i位為0時(shí),結(jié)果的第i位為1;否則該位值為0。
比如,char a = 0x12;
0x12轉(zhuǎn)為二進(jìn)制位 B0001 0010
其按位取反的結(jié)果為B1110 1101
于是 ~a = 0xED。
按位取反。常數(shù)c上面的波浪線是C語言中的一種公式圖,波浪線是按位取反的意思。在物理學(xué)上,很多經(jīng)測量得出的數(shù)值都被稱為常數(shù)。
第一個(gè)%是求模的意思,也就是兩個(gè)整數(shù)的除法得到的余數(shù)比如5%3=2, 1%3=1
!= 就是不等于,靠這個(gè)不說了,自己看去
是右移運(yùn)算(相當(dāng)于除以2),為左移同理,~按位取反,不如~3(0011)=12(1100)括號中的是2進(jìn)制表示,是邏輯與,|是邏輯或,^按位運(yùn)算符 異或0 ^ 1 得 1,所有的位運(yùn)算是針對2進(jìn)制
邏輯與,比如32=1;30=0;
是指針運(yùn)算中的取地址*是取地址中的內(nèi)容
sizeof是運(yùn)算一個(gè)結(jié)構(gòu)體或者變量等大小(字節(jié)表示)的運(yùn)算符
比如char a[20] ;sizeof(a)=20; int b[20]; sizeof(b)=4*20=80
以下按波浪線的出現(xiàn)順序標(biāo)號:
1、char *p,定義了一個(gè)指針變量p,這個(gè)變量p中存儲一個(gè)內(nèi)存地址。*p表示該內(nèi)存地址中的內(nèi)容。那么,while(*p)表示的是該內(nèi)存地址中的內(nèi)容不為空(即內(nèi)存地址中的內(nèi)容不為0,一般情況下,一個(gè)字符數(shù)組中有內(nèi)容,不為空;字符串結(jié)束時(shí),有一個(gè)\0,即0.)時(shí),就循環(huán)。實(shí)質(zhì)上就是如果是字符就循環(huán),遇到字符串結(jié)束,就終止循環(huán)。
2、同理,while(i=3 *p)表示當(dāng)i=3,并且該內(nèi)存地址中的內(nèi)容不為0時(shí),就循環(huán)。實(shí)質(zhì)上就是如果是字符就循環(huán),遇到字符串結(jié)束,就終止循環(huán)。
3、同理,if(*p),實(shí)質(zhì)上就是如果是字符就執(zhí)行if后面的語句,遇到字符串結(jié)束,就不執(zhí)行if后面的語句。
4、b[k++]=" ";表示字符數(shù)組b中的第b[k]個(gè)字符,賦值為空格,然后k++(即k=k+1)。這條語句相當(dāng)于兩條語句:b[k]="";k=k+1;
5、b[k]=‘\0’;一個(gè)字符串必須以\0結(jié)束。所以,在字符數(shù)組的第k位存儲一個(gè)\0。
6、ch a[60],b[80];定義了兩個(gè)字符數(shù)組,a能夠存儲60個(gè)字符,b能夠存儲80個(gè)字符。需要注意的時(shí),以上所說的60、80中包括\0在內(nèi)。
7、printf("Enter a String:");gets(a);這是兩條語句,可以分成兩行,
printf("Enter a String:");用來顯示提示信息,讓用戶輸入一串字符
gets(a);用來接收用戶的輸入,并且存放到字符數(shù)組a中。
8、printf("The Original String:");puts(a);也是兩條語句,顯示(確認(rèn))用戶輸入的字符串。
9、printf("\nThe String after insert space:");顯示一條信息,意思是在字符串插入空格后的內(nèi)容是:。其中\(zhòng)n在屏幕上換行
10、puts(b);printf("\n\n");輸出進(jìn)行函數(shù)調(diào)用后的字符串。
特別是,解釋一下字符數(shù)組與字符串的區(qū)別:
char a[60];
定義了一個(gè)字符數(shù)組,可以存儲60個(gè)字符。
如果按字符串顯示時(shí),例如puts(a),并不一定能夠完全按60個(gè)字符輸出,可能多于60個(gè),也可能少于60個(gè)。
因?yàn)閜uts(a)函數(shù),從第一個(gè)字符開始輸出,直到遇到\0時(shí)為止,也就是說,\0以后的字符不再輸出。
如果a[0]為\0,則什么出不顯示。如果直到a[59]也沒有遇到\0,puts函數(shù)會一直反內(nèi)存a[59]中以后的地址中內(nèi)容輸出來,一般是亂碼。如果a[7]是\0,則只顯示前7個(gè)字符,即a[0]到a[6]共7個(gè)。