第三章 資料型別

2022-06-20 14:39:10 字數 3807 閱讀 3051

1. 資料型別分類

基本型別

整數型別 short

int, int, long

int , long

long

int浮點數型別

float-單精度 double-雙精度 long

double

字元型別

char

布林型別 _bool

列舉型別

通過sizeof 可以看到,每種型別在記憶體中預留的位置是多大。

#include   int

main()

short

intis

2int length is

4long

intis

8long

long

intis

8floatis4

doubleis8

_bool is1

long duoble int

is16

單位是位元組

signed:帶符號,可以表示負數

unsigned:不帶符號,只能表示0和正數

指標型別

構造型別

空型別2. 數值型別的數值範圍

位元位,cpu能讀懂的最小單位,bit

記憶體中最小的定址單位,byte

每個bit,只能存放0和1

1個byte能夠表示的最大的二進位制數,為1111 1111。10進製表示為255。2**8 - 1

int 能存放4個位元組的數字,4個位元組就是4*8=32個bit,能存放的最大是32個1,10進製表示為 2**32-1 = 42949967295。也就數說int最大能存的數是42949967295,但是實際上不是這樣的。

int 要分為帶符號和不帶符號。

如果是帶符號,既可以表示正數,也可以表示負數。32個位元組,第乙個位元組用來表示符號位,0表示正數,1表示負數。

那麼能用的只剩下,31個位可以使用,

符號位為1的情況,31為能表示的數是31個1,2**31-1=2147483647。

符號位為0的情況,比較麻煩,計算機如何存放負數,通過補碼的形式存放負數,負數的補碼就不是二進位制數了

計算機存放的都是補碼。

補碼是怎麼來的呢?原碼---反碼---補碼

7在計算機中的原碼為 0 000 0111,最高位0表示正數,符號位,其餘為數值位

7在計算機中的反碼為 0 000 0111,正數的原碼和反碼一樣。

7在計算機中的補碼為 0 000 0111,正數的補碼和反碼一樣。

-7在計算機中的原碼為 1 000 0111,最高位1表示負數。

-7在計算機中的反碼為 1 111 1000,最高位1表示負數,在原碼的基礎上,符號位不變,數值位為全部取反,0變成1,1變成0

-7在計算機中的補碼為 1 111 1001, 最高位1表示負數,在反碼的基礎上,符號位不變,數值位的最後一位+1。

為什麼要存放補碼呢?是因為存放補碼可以用+表示加和減,一舉兩得。

-7+7怎麼表示呢?全是補碼的相加

1 111 1001

0 000 0111

1 111 1112 ,捨棄最高位(符號位)進製後變成 000 0000,結果為0。

-7-7 怎麼表示呢?也是補碼的相加。-7 + (-7)

1 111 1001

1 111 1001

1 2222002 進製後變成  1 111 0010,這是補碼的形式,如果變成反碼為 1 111 0001 在變成 原碼為 1 0001110 表示 -14。

計算機如果最高位字元位為1,表示為負數,需要將數值位-1,然後字元位取反,變成原碼,就知道是負多少了。 

存放補碼的意義是為了讓減法變成加法來運算,比較快。不需要借位。算完的結果仍然是補碼。

8個位元位,最小的負數是多少呢?負數的補碼,0越多,數值越大,表示的負數就越小。

補碼:1 000 0001---反碼為---  1000 0000 ---原碼為----1 111 1111 表示 -127

補碼:1 000 0000---反碼為----1 1111 1111 ---原碼為 ---- 1 000 0000 表示 -128, 因為 1000 0000的二進位制沒有對應的任何真數,所以認為規定了為-128。

8個位元位,最大的整數是多少呢?正數色補碼,1越多,數值越大,表示的正數越大。

補碼 0 111 1111 --- 反碼為 --- 0 111 1111 ---原碼為---- 0 111 1111 表示 127。

補碼 0 000 0000 --- 反碼為 ---- 0 000 0000 ---原碼為--- 0 000 0000 表示 0。

因此8個位元位的字元,反碼能夠表示帶符號的範圍為 [-128,127] 

3. 字元和字串

#include int

main()

root@ubuntu:/home/yanyanzhang/c_study# gcc test4.c -o test4 && ./test4

c = 67

67就是c在ascii碼表中對應的值

字元型別就是乙個特殊的整型,值都是對應到ascii碼表中的十進位制值。

重點: char型別預設不是signed char,c語言並沒有規定預設值,預設值是由編譯系統自行決定,int等預設就是singed int。

舉例說明:

#include int

main()

root@ubuntu:/home/yanyanzhang/c_study# gcc test5.c -o test5 && ./test5

my height

is -86

身高竟然是-86,很奇怪,因為ubuntu系統的gcc指定了char預設是signed char,取值範圍是-128,127,身高170超過了這個值,所以返回了怪怪的值-86。

將 char height;改為 unsigned char height;讓取值範圍變成0,255之間

root@ubuntu:/home/yanyanzhang/c_study# gcc test5.c -o test5 && ./test5

my height

is170

字串,宣告 char 變數名[字元數量] ,申請了乙個連續長度的空間。

#includeint

main()

; printf(

"name:%s\n

",name);

return0;

}root@ubuntu:/home/yanyanzhang/c_study# gcc test6.c -o test6 && ./test6

name:zhzzz 沒有出現亂碼,c語言定義字串的時候,要指定乙個結束位,\0,否則不知道從**結束

# todo

第三章基礎資料型別

go語言資料型別分類 基礎型別 復合型別 引用型別和介面型別 基礎型別 數字 字串和布林型 有符號和無符號的整數運算 int8 int16 int32 int64四種不同大小的有符號整數型別 uint8 uint16 uint32 uint64四種無符號整數型別 unicode字元rune型別是和i...

第三章 Python資料型別

3.1 python簡單資料型別 3.1.1 字串 str python中的字串通常由單引號 雙引號 三個單引號或三個雙引號包圍的一串字元組成。1.轉義字串 n 換行符 t 製表符 r 回車 字元 單引號字串中的單引號 雙引號字串中的雙引號 2.字串運算 python中是可以使用 運算子運算的。連線...

第三章 資料型別(中)測試

1.列表 元組 字串是 python 的 序列。無序 2.填空題 關鍵字既可以刪除列表中的乙個元素,也可以刪除整個列表。正確答案 del 3.填空題 已知列表 x 1,2,3 那麼執行語句 x.pop 0 之後,x 的值為 正確答案 2,3 這個要特別注意的是要細心.注意 pop 0 表示去首位而不...