關於C語言中一些型別變數在計算機儲存的學習

2021-09-23 20:56:12 字數 3229 閱讀 3922

我們都知道char型變數佔乙個位元組,int型占用4個位元組,long占用8個位元組,double型變數佔8個位元組,那麼這些變數和指標在計算機中儲存在哪個位址單元呢?

#include /* $end show-bytes */

#include #include /* $begin show-bytes */

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start, size_t len)

void show_int(int x)

void show_float(float x)

void show_pointer(void *x)

void test_show_bytes(int val)

void ******_show_a()

void ******_show_b()

void float_eg()

void string_ueg()

void string_leg()

void show_twocomp()

int main(int argc, char *ar**)

else

return 0;

}

結果如下:

hxl@hxl-virtual-machine:~/桌面/task/code$ ./sh

calling show_twocomp

0x7ffd77301fc4 0x39

0x7ffd77301fc5 0x30

0x7ffd77301fc6 0xc7

0x7ffd77301fc7 0xcf

calling ******_show_a

0x7ffd77301fbc 0x21

0x7ffd77301fbc 0x21

0x7ffd77301fbd 0x43

0x7ffd77301fbc 0x21

0x7ffd77301fbd 0x43

0x7ffd77301fbe 0x65

calling ******_show_b

0x7ffd77301fbc 0x78

0x7ffd77301fbc 0x78

0x7ffd77301fbd 0x56

0x7ffd77301fbc 0x78

0x7ffd77301fbd 0x56

0x7ffd77301fbe 0x34

calling float_eg

for x = 3490593

0x7ffd77301f9c 0x21

0x7ffd77301f9d 0x43

0x7ffd77301f9e 0x35

0x7ffd77301f9f 0x00

0x7ffd77301f9c 0x84

0x7ffd77301f9d 0x0c

0x7ffd77301f9e 0x55

0x7ffd77301f9f 0x4a

for x = 3510593

0x7ffd77301f9c 0x41

0x7ffd77301f9d 0x91

0x7ffd77301f9e 0x35

0x7ffd77301f9f 0x00

0x7ffd77301f9c 0x04

0x7ffd77301f9d 0x45

0x7ffd77301f9e 0x56

0x7ffd77301f9f 0x4a

calling string_ueg

0x55dc9b616d34 0x41

0x55dc9b616d35 0x42

0x55dc9b616d36 0x43

0x55dc9b616d37 0x44

0x55dc9b616d38 0x45

0x55dc9b616d39 0x46

calling string_leg

0x55dc9b616d3b 0x61

0x55dc9b616d3c 0x62

0x55dc9b616d3d 0x63

0x55dc9b616d3e 0x64

0x55dc9b616d3f 0x65

0x55dc9b616d40 0x66

hxl@hxl-virtual-machine:~/桌面/task/code$ ./sh 1

calling test_show_bytes

stack variable ival = 1

(int)ival:

0x7fff1c97f40c 0x01

0x7fff1c97f40d 0x00

0x7fff1c97f40e 0x00

0x7fff1c97f40f 0x00

(float)ival:

0x7fff1c97f40c 0x00

0x7fff1c97f40d 0x00

0x7fff1c97f40e 0x80

0x7fff1c97f40f 0x3f

&ival:

0x7fff1c97f408 0x34

0x7fff1c97f409 0xf4

0x7fff1c97f40a 0x97

0x7fff1c97f40b 0x1c

0x7fff1c97f40c 0xff

0x7fff1c97f40d 0x7f

0x7fff1c97f40e 0x00

0x7fff1c97f40f 0x00

解釋一下**執行結果。不帶引數執行時,呼叫show_twocomp()函式,這個函式再呼叫 show_bytes()函式,因為定義的是short型變數x=12345;轉化成16進製制是0x3039,則在計算機中就是0x30放在高位址區域,0x39放在低位址區域,這就是常說的小端模式,資料高有效部分放在高位址區域。同樣的-12345儲存時也是如此,需要注意的就是負數在計算機中儲存是用補碼表示,轉化成16進製制就是0xcfc7,後面**也是如此,需要注意的就是,64位機指標是8個位元組的,而且輸出時如果高位址對應的資料高有效區位數不足,則需要用0x00來存。

再要說的就是浮點數在計算機中的儲存,浮點數在64位機上一位表示符號,11位表示階碼,52位表示尾數,對於規格化的浮點數,11位階碼是由原數轉換成2進製後通過移動小數點,來獲得1.******x *2的n次方或者0.******x *2的n次方,此時階碼等於n+偏移量,偏移量=2的階碼-1次方-1,尾數就寫小數點後面的,最後寫成16進製制形式,按照小端模式儲存。其餘執行結果都可按照類似得出。

關於C 和C語言中一些變數和輸入輸出細節

對於c c 來說,最主要的型別也就是整型 浮點型 字元型這三種,對於每乙個型別又有不同的條線下的使用型別。整型又可以分為int 也陳偉long int short short基本用不到 long long。對於這三種變數型別,其長度也不同。值得注意的是在刷題中對於條件的把握。例如甲級題目中有一道題,...

C語言中一些基本問題

其中的u為unsigned,l為long,f為float c語言中常量的默情況 整形預設為有符號int 浮點型預設為double 如果整形常量大小超出int,預設自然就為long int 如果需要無符號整形常量的話就可以在常量後面加u或是u,如0u或是0u,同理可以在常量後面加ul或ul表示無符號長...

C語言中一些知識點

1.學程式設計 找 讀 改 寫 少看書。但少看不是不看,看一本書要限制在一天內。任務是通讀書中主要的概念,明白大致是幹什麼用的,形成乙個大概的框架 然後一周內乾掉書中全部 不理解再瀏覽書中相關章節,注意是瀏覽。或者刷部落格。實在刷不懂,可以先刷後面,待日後重新刷 因為書中 有些部分可能出自後面的章節...