電腦一些基本進位單位及細節基礎知識

來源:互聯網
上載者:User

最基本單位 轉換關係

1Byte = 8 Bit

1 KB = 1,024 Bytes

1 MB = 1,024 KB

1 GB = 1,024 MB

1 TB = 1,024 GB

1 PB = 1,024 TB

1 EB = 1,024 PB

1 ZB = 1,024 EB

1 YB = 1,024 ZB

 

PS:B即Byte,音譯拜特,位元組的意思,一般以位元組作為電腦儲存容量基本單位。1個位元組是8個二進位位(8個二進位位組成1個位元組),即1Byte=8bit(八個位的組合,共有256種電路狀態)。1個數字=1個英文字母(字元)=1位元組(Byte),即一個標準英文字母就是一個位元組,它有8個位元(bit),(如A為10D,用00001010來表示,8個二進位位)。1個漢字=2個位元組,即一個標準漢字有2個位元組,8個bit一個位元組,也就是說在電腦裡1個漢字要用16個bit來表示。另外中文標點符號佔2個位元組,英文標點符號(,.?!%&+-*/),佔1個位元組,中文省略符號(……)和括(破折)號(——)各佔4個位元組。

 

C語言中基本類型:

 

32位編譯器

char :1個位元組

char*(即指標變數): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器)

short int : 2個位元組

int: 4個位元組

unsigned int : 4個位元組

float: 4個位元組

double: 8個位元組

long: 4個位元組

long long: 8個位元組

unsigned long: 4個位元組

 

64位編譯器

char :1個位元組

char*(即指標變數): 8個位元組

short int : 2個位元組

int: 4個位元組

unsigned int : 4個位元組

float: 4個位元組

double: 8個位元組

long: 8個位元組

long long: 8個位元組

unsigned long: 8個位元組

 

指標變數運算總結:

 

對指標變數的引用包含兩個方面:一是對指標變數本身的引用,如對指標變數進行的各種運算;二是利用指標來訪問所指向變數,對指標的間接引用。

 

1指標的賦值運算

 

(1)將變數地址值賦給指標變數,使指標指向該變數。

設有如下定義:

int a,b,*pa,*pb;float *pf;

 

第一行定義了整型變數a,b及指標變數pa,pb。pa、pb還沒有被賦值,因此pa、pb沒有指向任何變數,6.3(a)。下面的語句:

a=12;b=18;pa=&a;pb=&b;

 

第一行對a、b變數賦值,第二、三行分別將變數a、b的地址分別賦給指標變數pa、pb,使pa、pb分別指向了變數a與b。這樣,變數a也可以表示為*pa,變數b亦可以表示為*pb。6.3(b)所示。

 

(a)                                      (b)                                                             (c)

                                  圖6.3指標地址賦值

 

(2)相同類型的指標變數間的賦值

pa與pb都是整型指標變數,它們間可以相互賦值,如:pb=pa;是合法的,此時pa,pb都指向變數a,a、*pa、*pb是等價的。6.3(c)所示。

注意:只有相同類型的指標變數才能相互賦值,如pf=pa;是不允許的。因為pa是整型指標,pf是浮點型指標。

 

(3)給指標變數賦“空”值

當指標變數剛定義時,它的值是不確定的,因而指向一個不確定的單元,若這時引用指標變數,可能產生不可預料的後果,破壞程式或資料。為了避免這些問題的產生,除了上面介紹的給指標變數賦以確定的地址值之外,亦可以給指標變數賦“空”值,說明該指標不指向任何變數。

 

“空”指標值用NULL表示,NULL是在標頭檔stdio.h中預定義的常量,其值為0,在使用時應加上預定義行,如:

 

#include "stdio.h"pa=NULL;

 

亦可以用下面的語句給指標賦“空值”

 

pa=0;

pa='\0';

 

這裡指標pa並非指向0地址單元,而是具有一個確定的“空值”,表示pa不指向任何變數。

注意:指標雖然可以賦值0,但卻不能把其他的常量地址賦給指標。例如,即使你知道整型變數a的地址是4000,也不能使用下面的指派陳述式:

 

pa=4000;而只能:pa=&a;

對全域指標變數與局部靜態指標變數而言,在定義時若未被初始化,則編譯系統自動初始化為空白指標0。局部指標變數不會被自動初始化,因而指向不明確。

 

例6.1從鍵盤上輸入兩個整數到a、b,按由大到小輸出。

 

#include <stdio.h>void main( ){      int a,b,*pa=&a,*pb=&b,*p; /*定義pa、pb,並初始化,6.4(a)所示*/     scanf("%d%d",&a,&b);     if(*pa<*pb)     {             p=pa; /*進行指標交換,6.4(b),(c)所示*/            pa=pb;            pb=p;     }      printf("\n a=%d,b=%d\n",a,b);      printf("\n max=%d,min=%d",*pa,*pb); /*pa指向大數,pb指向小數*/}

 

 

若輸入:12 22

輸出結果:a=12,b=22

max=22,min=12

 

例中一開始指標變數pa與pb被初始化,分別指向變數a與b,輸出時約定pa指向大數,pb指向小數。比較a、b的大小,a小時則交換指標pa、pb,使pa指向大數b,pb指向小數a,從而達到題中要求。指標變化情況6.4所示。

(a)                                           (b)                                  (c)

 

圖6.4指標的變化情況

 

2指標的算術運算

 

一個指標可以加、減一個整數n,但其結果不是指標值直接加或減n,而是與指標所指對象的資料類型有關。指標變數的值(地址)應增加或減少“n×sizeof(指標類型)”。

 

例如,有下列定義:

int *p,a=2,b=4,c=6;

 

假設a,b,c三個變數被分配在一個連續的記憶體區,a的起始地址為4000;6.5(a)所示。

        (a)                                          (b)                                         (c)

圖6.5 指標移動

 

語句p=&a;表示p指向a變數,即p的內容是4000;6.5(b)。

語句p=p+2;表示指標向下移兩個整型變數的位置,p的值為4000+2×sizeof(int)=4000+2×2=4004,而不是4002,因為整型變數佔兩個位元組,6.5(c)所示。

 

我們可以直觀的理解為:

p=p+n表示p向高地址方向移動n個儲存單元塊(一個單元塊是指指標所指變數所佔儲存空間)。

p=p-n表示p向低地址方向移動n個儲存單元塊。

p++,++p,是把當前指標p向高地址移動一個儲存單元。

若p++作為運算元,則先引用p,再將p向高地址方向移動一個儲存單元塊,而++p是先移動指標後再引用p。

p--,--p,當前指標p向低地址移動一個儲存單元塊。

若p--作為運算元,則先引用p,再將p向低地址移動一個儲存單元。而--p是先移動指標後再引用p。

 

3指標的關係運算

指標可以進行關係運算。在關聯運算式中允許對兩個指標進行所有的關係運算。若p,q是兩個同類型的指標變數,則:p>q,p<q,p==q,p!=q,p>=q都是允許的。

假設p、q是指向同一數組的兩個指標,執行p>q的運算,其含義為,若運算式結果為真(非0值),則說明p所指元素在q所指元素之後。或者說q所指元素離數組第一個元素更近些。

注意:在指標進行關係運算之前,指標必須指向確定的變數或儲存地區,即指標有初始值;另外,只有相同類型的指標才能進行比較。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.