c語言記憶體分析
一、進製
概念:進製是一種計數方式,是數值的表現形式
4種主要的進製:
①. 十進位制:0~9
②. 二進位制:0和1
③. 八進位制:0~7
④. 十六進製制:0~9+a b c d e f
c語言在預設的情況下為十進位制。
int num=1010;//十進位制
int num=0b1100;//二進位制,以0b或者是0b開頭
int num=014;//八進位制,以0開頭
int num=0x4;//十六進製制,以0x開頭
佔位符:
%d和%i :一十進位制整數的形式輸出乙個值
%o :以不帶符號的八進位制輸出
%x :以不帶符號的十六進製制輸出
%u :以不帶符號的十進位制輸出
%c : 輸出字元
%p : 輸出位址
%f : 輸出小數
%s : 輸出字串
n位二進位制的取值範圍:
2位···0~3 0~2的2次方-1
3位···0~7 0~2的3次方-1
n位··· 0~2的n次方-1
判斷以下資料是否正確:
0x7h4 0986 .089 0b325 10e8.7 96f -.003
型別的取值:
在64位編譯器下,int型別 佔4個位元組 共4x8=32bit char型別 佔1個位元組 共1x8=8bit ,在記憶體中以位元組為單位進行儲存。
二、記憶體分析
注意:記憶體定址,由大到小。
int a=1;
int b=2;
三、型別說明符
short== short int %d 2
long ==long int %ld 8
long long ==long long int %lld 8
signed ==signed int==int %d 4(有符號)
unsigned ==unsigned int %u 4(無符號)
signed和unsigned的區別在於最高位要不要拿來作為符號位,顯然後者的取值範圍更大。這兩個說明符可和long等說明符組合使用,但不會改變位元組數。unsigned代表int型別的最高位,不必用來作為符號位。
四、位運算
(一)按位與 &
功能:只有對應的兩個二進位制位均為1時,結果才為1,否則為0。
示例:9&5 的結果為1
1001
0101
——0001
說明:如果位與上1則保留原值,與上0則為0。
應用:查詢0101 0111 0000的倒數第六位是0還是1,則可以與上數值以判斷,得出的結果是什麼,那麼它的原值就是什麼。
0101 0111 0000
0000 0010 0000
0000 0010 0000
(二)按位或 |
功能:只要對應的兩個二進位制位有乙個為1則結果為1,否則為0。
舉例:9|5的結果為13
1001
0101
——1101
(三)按位異或 ^
功能:當對應的兩個二進位制位不相等時,結果為1,否則為0。
舉例:9^5的結果為:12
1001
0101
——1100
規律:①. 相同整數異或的結果為0,如5^5=0
②. 順序可以交換。如9^5^9=9^9^5=0^5=5
③. 任何數值跟0進行異或,結果還是原來的數值。9^0=9
④. a^b^a==b
(四)按位取反 ~
舉例:~9的結果為-10
0000 0000 0000 0000 0000 0000 0000 1001
1111 1111 1111 1111 1111 1111 1111 0110
(五)左移 <<
如a把整數a的二進位制位全部左移n位,高位丟棄,低位補零。左移n位的結果其實是乘以2的n次方,由於符號位會被丟棄,所以結果可能會改變正負性。
舉例:9<<1的結果為18
0000 1001
0010 0010
應用:如果某個數需要乘以2的n次方,那麼使用位運算效率更高。
(六)右移 >>
如a>>n
把整數a的二進位制位全部右移n位,低位丟棄,符號位不變,一般情況下高位用符號位補齊。右移的結果實際上是除以2的n次方。
(七)練習
(1)使用位運算交換兩個變數的值
view code
(2)使用位&運算子判斷變數的奇偶性
view code
(3)編寫乙個函式,輸出整數的二進位制格式
view code
五、char型別
(一)基礎
char c=『a』;
字元在記憶體中也是也二進位制的格式儲存的。
int num=6;//在記憶體中以00···0110儲存
char num=『6』;//對應的ascii碼值是54=32+16+4+2,在記憶體中為11 0110
兩者之間有著本質的區別,乙個是具體的整數值,乙個是字元,以ascii格式儲存。
(二)使用注意
單引號只能括住單位元組的字元,ascii中的所有字元都是單位元組的。
char c=』男』;//錯誤,因為乙個漢字佔據3個位元組的儲存空間
char c=」a」;//錯誤,這是字串,為『a』+『\0』。
char c=65;//正確,另一種形式而已
char型別佔據乙個位元組,所以它的取值範圍為-128~127。
幫助:輸出乙個\,使用\\,輸出乙個單引號使用\』,輸出乙個雙引號,使用\"。
練習:編寫乙個函式,將小寫字母轉換為大寫。
1 #include23 4 5 char upper(char c)
6 7
18 19 int main()
20 21
04 黑馬程式設計師 進製 記憶體分析
概念 是一種計數的方式,數值的表示形式 進製涉及的概念 基數 基數 基數是用來計算數值的,比如十進位制的基數是10,二進位制的基數是2 基數的使用 110 1 10 2 1 10 1 0 10 0 100 10 0 110 漢字 十一 十進位制 11 二進位制 1011 八進位制 13 多種進製 十...
C位運算分析及進製轉換
作為c初學者,曾經的我在這個位運算和二進位制的轉換中始終搞不懂怎麼去準換,怎麼去搞懂。這裡把我掌握的方法給大家分享下 二進位制轉換成八進位制簡易的辦法,我們只需要記住0 7的二進位制。對二進位制從右向左計算。每隔3位計算 2進製8進製 0011 0102 0113 1004 1015 1106 11...
iOS記憶體洩漏檢測及分析
我們知道,ios開發中對記憶體管理的要求非常嚴格,一旦存在記憶體洩漏,後果是非常嚴重的,會導致程式非常容易崩潰。儘管目前ios開發基本上都是採用的arc方式進行記憶體管理,但是一不小心就會存在記憶體洩漏的問題。首先,我們需要定位記憶體洩漏的問題,目前比較常用的記憶體洩漏的排查方法有兩種,都在xcod...