C語言記憶體分析

2022-08-15 17:24:15 字數 3258 閱讀 8918

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)使用位運算交換兩個變數的值

1 #include2

3int

main()45

view code

(2)使用位&運算子判斷變數的奇偶性

1 #include2

3int

main()45

view code

(3)編寫乙個函式,輸出整數的二進位制格式

1 #include2

3void putbinary(int

number);45

intmain()67

2223

2425

void putbinary(int

number)

2627

5455

5657 }

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 #include234

5char upper(charc)6

71819int

main()

2021

view code

C語言記憶體分析

c語言記憶體分析 一 進製 概念 進製是一種計數方式,是數值的表現形式 4種主要的進製 十進位制 0 9 二進位制 0和1 八進位制 0 7 十六進製制 0 9 a b c d e f c語言在預設的情況下為十進位制。int num 1010 十進位制 int num 0b1100 二進位制,以0b...

C語言記憶體管理分析

歡迎進入記憶體這片雷區。偉大的bill gates 曾經失言 640k ought to be enough for everybody bill gates 1981 程式設計師們經常編寫記憶體管理程式,往往提心吊膽。如果不想觸雷,唯一的解決辦法就是發現所有潛伏的地雷並且排除它們,躲是躲不了的。本...

C語言記憶體管理分析

偉大的bill gates 曾經失言 640k ought to be enough for everybody bill gates 1981 程式設計師們經常編寫記憶體管理程式,往往提心吊膽。如果不想觸雷,唯一的解決辦法就是發現所有潛伏的地雷並且排除它們,躲是躲不了的。本章的內容比一般教科書的要...