读c语言深度剖析 -- 单引号与双引号、逻辑运算符、位运算符、花括号
單引號(hào)與雙引號(hào)
我們知道雙引號(hào)引起來(lái)的都是字符串常量,單引號(hào)引起來(lái)的都是字符常量。
比如:‘a(chǎn)’和“a”完全不一樣,在內(nèi)存里前者占1個(gè)byte,后者占2個(gè)byte。
1,‘1‘,“1”。
第一個(gè)是×××常數(shù),32位系統(tǒng)下占4個(gè)byte;第二個(gè)是字符常量,占1個(gè)byte;第三個(gè)是字符串常量,占2個(gè)byte。
三者表示的意義完全不一樣,所占的內(nèi)存大小也不一樣
字符在內(nèi)存里是以ASCAII碼 存儲(chǔ)的,所以字符常量可以與×××常量或變量進(jìn)行運(yùn)算。如:‘A‘+1。
關(guān)于字符串常量在指針與數(shù)組那章將有更多的討論。
?邏輯運(yùn)算符
||? 和&&?是我們經(jīng)常用到的邏輯運(yùn)算符,與按位運(yùn)算符|和&是兩碼事。雖然簡(jiǎn)單,但畢竟容易犯錯(cuò)??蠢?#xff1a;
int i=0;
int j=0;
if( (++i>0) || (++j>0) )
{
?? //打印出i和j的值。
}
結(jié)果:i=1;j=0。不要驚訝。
邏輯運(yùn)算符||兩邊的條件只要有一個(gè)為真,其結(jié)果就真;只要有一個(gè)結(jié)果為假,其結(jié)果就為假。
if((++i>0)||(++j>0))語(yǔ)句中,先計(jì)算(++i>0),發(fā)現(xiàn)其結(jié)果為真,后面的(++j>0)便不再計(jì)算。
同樣&&運(yùn)算符也要注意這種情況。這是很容易出錯(cuò)的地方,一定要注意。
位運(yùn)算符
C語(yǔ)言中位運(yùn)算包括下面幾種:
&按位與??? |按位或??? ^按位異或
~取反???? <<左移??? >>右移
前4種操作很簡(jiǎn)單,一般不會(huì)出錯(cuò)。但要注意按位運(yùn)算符|和&與邏輯運(yùn)算符||和&&完全是兩碼事,別混淆了。
其中按位異或操作可以實(shí)現(xiàn)不用第三個(gè)臨時(shí)變量交換兩個(gè)變量的值:a^=b;?? b^=a;? a^=b;
但并不推薦這么做,因?yàn)檫@樣的代碼讀起來(lái)很費(fèi)勁。
左移和右移
左移運(yùn)算符“<<”是雙目運(yùn)算符。
其功能把“<<”左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由“<<”右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。
右移運(yùn)算符“>>”是雙目運(yùn)算符。
其功能是把“>>”左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,“>>”右邊的數(shù)指定移動(dòng)的位數(shù)。
但注意:對(duì)于有符號(hào)數(shù),在右移時(shí),符號(hào)位將隨同移動(dòng).
當(dāng)為正數(shù)時(shí),最高位補(bǔ)0;
而為負(fù)數(shù)時(shí),符號(hào)位為1,最高位是補(bǔ)0或是補(bǔ)1取決于編譯系統(tǒng)的規(guī)定。TurboC和很多系統(tǒng)規(guī)定為補(bǔ)1。
0x01<<2+3的值為多少?
結(jié)果為7嗎?測(cè)試一下。結(jié)果為為 32
因?yàn)椤?#43;”號(hào)的優(yōu)先級(jí)比移位運(yùn)算符的優(yōu)先級(jí)高
好,在32位系統(tǒng)下,再把這個(gè)例子改寫一下:
0x01<<2+30;或0x01<<2-3;
這樣行嗎?不行。一個(gè)整型數(shù)長(zhǎng)度為32位,左移32位發(fā)生了什么事情?
溢出!左移-1位呢?反過來(lái)移?
切記,左移和右移的位數(shù)是有講究的。左移和右移的位數(shù)不能大于數(shù)據(jù)的長(zhǎng)度,不能小于0。
花括號(hào)
char a[10]= {“abcde”};
char a[10]=“abcde”;????兩者均正確輸出效果是一樣的
花括號(hào)的作用是什么呢?我們平時(shí)寫函數(shù),if、while、for、switch語(yǔ)句等都用到了它
但有時(shí)又省略掉了它。簡(jiǎn)單來(lái)說花括號(hào)的作用就是打包。使之形成一個(gè)整體,并與外界絕緣。
轉(zhuǎn)載于:https://blog.51cto.com/xzv587/1363219
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的读c语言深度剖析 -- 单引号与双引号、逻辑运算符、位运算符、花括号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划---背包问题分析
- 下一篇: MVVM及MVVMLight相关资料