C 資料型別和表示式 1 無符號和有符號整型

2021-07-27 15:22:21 字數 2473 閱讀 1756

對於熟悉的關鍵字,看到了,第一反應必須快速的給出正解,倘若不能,就說明還不夠熟悉。我問自己:資料型別有哪些?似乎一下子說不那麼全。習慣性的要列個圖,不求多高的要求,起碼要和課本上概括的差不多吧。

說到資料型別,得記得住這些型別是佔多少位元組吧,畢竟我們是搞地基的。又可以重溫一遍資料型別了,再閉上眼睛回想一下打出來,看看能有多快!!!、

1;int 即signed int. 4個位元組

2;unsigned int .4個位元組

3;short int . 2個位元組

4;unsigned short int . 2個位元組

5;long int .4個位元組

6;unsigned long int. 4個位元組

7;【signed】/【unsigned】 char . 1個位元組

8;float . 4個位元組

9; double/long double . 8個位元組

還想再回顧一遍:

signed int , short int , long int , unsigned int ,unsigned short int, unsigned long int, signed char ,unsigned char,float, double,long double^^

一,有符號和無符號的區別!

為什麼signed int ,unsigned int , signed char, unsigned char^^

如果是signed有符號的話,那麼這個數值就要用補碼的形式來存放,在這個存放的單元中,儲存單元的最高位(什麼代表位?bit位元嘛!)來表示數值的符號。如果是unsigned無符號的話,數值就沒有符號,全部二進位制位都用來表示這個數值的本身。

再用一句話來概括,無符號和有符號的區別就在於它們在記憶體中顯示的數值的第一位,也就是最高位是當做符號位來用還是當做數字本身來用。這樣說太抽象,畫個圖一目了然。

我們來帶著問題的來研究這幅圖:

1,為什麼有16個空格?

首先要知道乙個單位,bit位元,這是我們表示資訊的最小單位了,它呢,只有兩種狀態,要麼是0,要麼是1. 乙個位元組(byte)是8個位元,即1 byte = 8 bit.

short int是兩個位元組,所以也就是16個位元。

(注:

short int在16位機佔2個位元組,在32位機中佔4個位元組

2,裡面的0和1代表什麼意思?

在第一點裡面也說了,只有0和1兩種狀態、計算機的所有資料都是按照二進位制進行儲存的!那麼在16位機中,short int佔了兩個位元組,有16個位元位,就是有16個空格讓你填,只能填0或1,會數學的都知道16個空格有多少中組合了吧,2的16次方!為什麼是2的16次方,0和1兩個數排列組合,不是2難道是3嗎!

為什麼是2的15次方,上面已經說了,最高位是符號位,剩下15位儲存數值,為什麼最大值2的15次方還要減一?

1+2^1+2^2+…+2^14

=2^15-1

沒問題吧!

問題又來了,為什麼最小值是-32768,而不是-32767?

計算機用二進位制來表示負數時用的是「補碼法」,做法就是正數按原碼,負數用其相反數的反碼加一,有點繞,需要專門寫一篇進製轉化的文章。

這種結果用-32768代替了「-0」,可以讓符號位能與有效值部分一起參加運算,從而簡化了運算規則,同時使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計。

再換種說法,原碼中,+0和-0都表示零,補碼中,正零還是零,但「負零」用來表示最小值(-32768),暫且把這個當做一種規定。記憶體中有符號整數是用補碼形式儲存,如果是用原碼形式儲存由於0可以表示為 0000 0000 0000 0000[+0] 或者 1000 0000 0000 0000[-0] ,所以只能表示-32767~32767 ,但是如果用補碼儲存,0[+0或-0]就被唯一確定了是0000 0000 0000 0000 ,多出來的一位用於表示最小整數,即-32768 ,聽了可能還是不太明白,等寫新的文章時再進行闡述!

那麼,**無符號的取值範圍是多少呢?**2的16次方減1.也就是65535,能看懂有符號的為什麼減一,就能看懂無符號為什麼減一,這個二進位制的計算方法。因為沒符號嘛,所以最小值就是0了,所以無符號的取值範圍是0~65535.

有符號和無符號資料型別

原版出處 c語言中提供了很多整數型別 整型 主要區別在於它們取值範圍的大小。int代表有符號的整數,也就是說,用int宣告的變數可以是正數也可以是負數,也可以是零,但是只能是整數。比如 int a 3 int b 0 int c 5 以上這些都是合法的。int的取值範圍因機器而異,一般而言,在較舊的...

資料型別和表示式(c )

main.cpp 資料型別與表示式 created by mac on 15 2 16.include int main int argc,const char argv 三個數的排序 using namespace std void sortthree int x,int y,int z else...

有符號整型資料和無符號資料型別

整型有無符號 unsigned 和有符號 signed 兩種型別 在預設情況下宣告的整型變數都是有符號的型別 char有點特別 如果需宣告無符號型別的話就需要在型別前加上unsigned。無符號數隻表示大小,有符號數最高位 二進位制情況下最高位表示符號位 在同一作業系統 下,有符號數和無符號數的最大...