C語言如何根據資料型別來處理不同的資料?

2022-08-19 09:48:11 字數 3658 閱讀 1065

位指的是短小的二進位制數字,是乙個二進位制的賦值變數。乙個單一的位只能代表兩個值所以我們要把他們組織到一起才能表示更廣範圍的數字。位的最常組織方式是位元組,它是乙個八位的位組數列。

將這些位組織到一起後,有一些方法可以用來對他們進行解釋。我們將每一種解釋方法稱為位模式。

1.純數字位模式

最簡單的位模式是用於非負整數的。即為我們所理解的普通的二進位制表示數字那種,沒有正負之分。

給定乙個八位的位組,它能夠儲存的最大的整數字

2^8-1=256     範圍是0~256,

具有2的最低次方的位被稱為最小有效位(least significant bit)或最低位(lowest-order bit),相反具有2的最高次方的位稱為最大有效位或最高位。

通過將4個位元組組合在一起,則純數字位模式就可以表示乙個高至2^32-1=4294967295

c語言中,有幾個資料型別使用了純數字位模式,乙個是unsigned char型別是乙個1位元組(8位)變數,數值範圍0~256.在32位系統中,乙個unsigned int型別是乙個4位元組變數,它能夠表示0~4294967295.乙個unsigned short int

2位元組變數,表示0~656535.在技術上c語言並沒有規定int型別的大小。

2.符號數字位

模式在想表達帶有符號位模式的整數時,比較常見的方法是將最高位分配位符號位(sign bit)者稱為符號位模式

符號位為0表示正數,1表示負數,

符號位模式有兩個缺點。首先0可能有兩個位值:00000000或10000000更重要的是使用符號數字位模式,使二進位制的加法變得複雜了。由於者兩個缺點,所以在c語言中沒有資料型別使用符號數字模式。通常僅在簡單的計算電路,或這些缺陷確定不會帶來麻煩的設計問題中,才回看到符號數字位模式。

3.二進位制補碼位模式

使用二進位制補碼位模式,整數和零被解釋成和純數字位模式完全一樣的結果,而負數的表達則需要通過以下幾步

1. 列出用來表達該數整數的位

2.取反(反轉)所有位

3.加一

拿-7舉個栗子

正的值               0     0     0     0     0     1     1     1

取反所有的位     1     1     1     1     1     0     0     0

加一                  1     1     1     1     1     0     0      1 

當乙個二進位制不啊位模式數字在其最高位是一的時候,他所表達的就是乙個負數為確定這個值我們進行相同的操作步驟

未知的值(-?)    1     1     1     1     1     0     0     1

取反所有位            0     0     0     0     0     1     1     0

加一                      0     0     0     0     0     1     1     1

所以未知的值就是負七

二進位制補碼位模式位我們解決了純數字位模式中的雙零問題。用來表示零的唯一一種位排列方式就是00000000.

使用符號位模式,位的組合10000000表示負零,在二進位制補碼位模式中,它表達的是-128

未知的值(-?)    1     0     0     0     0     0     0     0

取反所有位            0     1     1     1     1     1     1     1

加一                      1     0     0     0     0     0     0     0

10000000表示-128這個數被稱為奇異數。所以二進數制補碼位模式表達數的範圍就是-128~27.

二進位制補碼位模式還是的實現加法和減法變得更加容易,因為,在不考慮兩個輸得符號的情況下,他們總是被相加,

由於有效位表達數值的範圍是有限的,所以當兩個數的和超出範圍是就會出現算術溢位的問題。在計算機系統中,二進位制位模式是用來表示符號整數的最常見模式

4.浮點位模式

為了儲存實數我們可以使用能夠定點位模式和浮點位模式兩種。

定點位模式在小數部分中用來表達小數字的個數是固定的。我們認為這是乙個限制,而且對位的使用也是有限的。

利用浮點位模式

這裡我們用的是二進位制中的科學技術法,即

18.375=10010.011=1.0010011x2^4

我們假定前導值是一,就可以簡化對乙個數的儲存

浮點位模式是按照下面方式來儲存數的

1.fx2^e

必須被儲存的數就是用來表示符號的位,用來表示小數f的位以及用來表示指數e的位。其餘可以使用的位可以在小數部分和指數部分進行分配。給定32位(4位元組)標準就是使用23位來表達小數,8位來表示指數

所有的位               1                   8                         23

符號           指數e                       小數f

位序                     31               30…23                  2…0

用於指數的8個位用來表達的範圍是-127~128.在十進位制中能夠使用的所有精度在使用4位元組浮點位模式是大約是8節。

可以使用一下步驟將乙個數從十進位制換成使用浮點位模式的二進位制

1.寫出符號位

2.按照定點二進位制方式寫出沒有符號的數

3.規格化,將基點(十進位制小數點)移至第乙個1的後面

4.將f賦值位基點後面的部分,不足位補零。

5.將e賦值位給定的指數,通過+127改變它的值

舉個栗子

-118.625

(1)s=1

(2)118.625=1110110.101

(3)1110110.101=1.110110101x2^6

(4)f=110 1101 0100 0000 0000 0000

(5)e=6+127=133=1000 0101

1 1000 0101 110 1101 0100 0000 0000 0000

指數通過加上127進行了改變,以便能夠計算能夠指數儲存為乙個純數值,並且依舊表達-127~128之間的數,

在c語言中,資料型別float使用4個位元組來儲存乙個實數,而資料型別double則使用8個位元組來儲存乙個實數。double型別依舊使用1位表示符號,但它使用11位表示指數並使用52位來儲存小數部分。能夠表示更廣範圍內的數。

5.ascll和unicode位模式

為了表示非數值資料,就必須是使用另外一種位模式。ascll(美國國家資訊交換標準碼)位模式就是位表示英語文字符號以及為了列印英語文字需要的控制字元而制定的。

在c語言中資料型別char 和unsigned char都使用了ascll位模式

使用格式符%c函式,呼叫printf()將使用ascll位模式來解釋變數。使用格式符%d(或%i),函式呼叫printf()

將變數解釋位為乙個整數。對資料char而言printf()函式使用二進位制補碼位模式解釋變數,而對unsigned char,printf()函式則使用純數字位模式解釋變數。

C語言 資料型別

基本型別 整形 int 字元型 char 實型 浮點型 單精度 float 雙精度 double 構造型別 陣列型別,結構型別 struct 聯合型別 uion 列舉型別 enum 指標型別 空型別 無值型別 void。常量 在程式執行過程中,其值不能被改變的量稱為常量。變數 變數代表記憶體中具有特...

c語言資料型別

下面是我關於c語言中各種資料型別長度的總結 參考the c programming language 1.c語言中的整數型別有char,short,int,long等幾種,下面是c語言對每種資料型別長度的規定 a short和long型別的長度不相同 b int型別通常同具體機器的物理字長相同 c ...

C語言 資料型別

整形資料在記憶體中的存放形式 數值是以補碼表示的 1.正數的補碼和原始碼相同,2.負數的補碼 將該數的絕對值的二進位制形式按位取反再加1.例如 求 10 的補碼 10的原始碼 0000 0000 0000 1010 取反 1111 1111 1111 0101 再加1,得 10補碼 1111 111...