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