Day3 資料型別

2022-07-10 19:57:17 字數 3656 閱讀 9813

資料型別:

c是有型別的語言,c語言的變數,必須:在使用前定義,並且要確定型別

c以後的語言向兩個方向發展:

c語言的資料型別:

型別有何不同:

sizeof是乙個運算子,給出某個型別或變數在記憶體中所佔的位元組數

用法如:sizeof(int)   sizeof(i)

注意:sizeof是靜態運算子,它的結果在編譯時刻就決定了,而且,不要在sizeof的括號裡做運算,這些運算不會做的,它只會給出括號內資料在記憶體所佔的位元組數

整數在計算機內部的表達:計算機內部一切都是二進位制。

1個位元組可以表達的數:00000000-11111111(0-255)

二進位制的負數如何表達?

三種方案:1.仿照十進位制,有乙個特殊的標誌表示負數  2.取中間的數為0,如1000000表示0,比它小的是負數,比它大的是正數  3.補碼

補碼:補碼的意義就是補碼和原碼可以加出乙個溢位的「零「。

因為0-1=-1,(1)00000000-00000001=11111111,因此11111111被當作純二進位制看待是255,被當作補碼看待是-1.

同理,對於-a,它的補碼就是0-a,實際是,n是這種型別的位數

數的範圍:

對於乙個位元組(8位,比如char),可以表達的是:00000000 - 11111111

其中: 00000000—>0,

11111111 ~10000000—> -1~ -128

00000001 ~01111111—> 1~127

unsigned

如果乙個自變數常數想要表達自己是unsigned,可以在後面加u或u,如255u。同理,如果乙個自變數常數想要表達自己是long,用l或l表示long(long)。

unsigned的初衷並非擴充套件數能表達的範圍,而是為了做純二進位制運算,主要是為了移位

unsigned數字只有0和正整數部分。

整數越界

整數是以純二進位制方式進行計算的,所以∶

整數的輸入輸出

只有兩種形式: int或long long

%d: int

%u: unsigned.

%ld: long long

%lu : unsigned long long

8進製和16進製制

選擇整數型別

為什麼整數要有那麼多種?

為了準確表達記憶體,做底層程式的需要。現在,沒有特殊需要,就選擇int

·現在的cpu的字長普遍是32位或64位,一次記憶體讀寫就是乙個int,一次計算也是乙個int,選擇更短的型別不會更快,甚至可能更慢

現代的編譯器一般會設計記憶體對齊,所以更短的型別實際在記憶體中有可能也佔據乙個int的大小(雖然sizeof告訴你更小)

unsigned與否只是輸出的不同,內部計算是一樣的

浮點數

字元型別

char是一種整數,也是一種特殊的型別:字元。這是因為:

·用單引號表示的字元字面量:'a', '1'

·』』也是乙個字元

printf和scanf裡用%c來輸入輸出字元

輸出精度

在%和f之間加上.n可以指定輸出小數點後幾位,這樣的輸出是做4舍5入的

printf("%.3fn",-0.0049);

printf("%.30fn"-0.0049);

printf("%.3f\n",-0.00049);

字元計算:

乙個字元加乙個數字得到ascii碼表中那個數之後的字元

兩個字元的減,得到它們在表中的距離

大小寫轉換:

字母在ascii表中是順序排列的

大寫字母和小寫字母是分開排列的,並不在一起

'a'-'a'可以得到兩段之間的距離,於是a+'a'-'a"可以把乙個大寫字母變成小寫字母,而a+'a'-'a'可以把乙個小寫字母變成大寫字母

逃逸字元(轉義字元):

用來表達無法印出來的控制字元或特殊字元,它由乙個反斜槓「\」開頭,後面跟上另乙個字元,這兩個字符合起來,組成了乙個字元

自動型別轉換:

當運算子的兩邊出現不一致的型別時,會自動轉換成較大的型別

大的意思是能表達的數的範圍更大

char -> short —> int —> long -> long long.

int —> float—> double

對於printf,任何小於int的型別會被轉換成int;float會被轉換成double

但是scanf不會,要輸入short,需要%hd

強制型別轉換:

要把乙個量強制轉換成另乙個型別(通常是較小的型別),需要:(型別)值

比如:(int)10.2,(short)32

注意:這時候的安全性,小的變數不總能表達大的量:(short)32768

注意:只是從那個變數計算出了乙個新的型別的值,它並不改變那個變數,無論是值,還是型別都不改變。

強制型別轉換的優先順序比四則運算(加減乘除)高。

布林型別:bool

#include,之後就可以用bool、true和false。

邏輯運算:

邏輯運算是對邏輯量進行的運算,結果只有0或1.邏輯量是關係運算或邏輯運算的結果。

邏輯運算子:!(非)、&&(與)、||(或)

優先順序: !>&&>||

邏輯短路:邏輯運算是自左向右進行的,如果左邊的結果已經能夠決定結果了,就不會做右邊的計算。比如:a==6 && b==1 、-a==6 && b+=1

條件運算:條件、條件滿足時的值和條件不滿足時的值

比如:count = (count>20)?count-10:count+10

優先順序高於賦值運算子,但是低於其他運算子。

條件運算子是自右向左結合的。

逗號運算:逗號用來連線兩個表示式,並以其右邊的表示式的值作為它的結果。逗號的優先順序是所有的運算子中最低的,所以它兩邊的表示式會先計算;逗號的組合關係是自左向右,所以左邊的表示式會先計算,而右邊的表示式的值就留下來作為逗號運算的結果。

比如:i = (3+4,5+6)   輸出i =11

i = 3+4,5+6    輸出i = 7

一般在for迴圈中使用,如for (i=0,j=0;i進製轉換

二進位制八進位制

十進位制十六進製制

Day 3 過濾資料

使用select語句的where子句指定搜尋條件。在select語句子中,where 搜尋條件 過濾條件 在 from子句 表名之後給出。同時使用where與order by,order by放最後.select prod name,prod price from products where pr...

day3 型別轉換

2.自動型別轉換 number int float bool complex 3.容器型別的強制轉換 str list tuple set dict 變數的快取機制 僅對python3.6版本負責 var1 99var2 98.789 var3 true var4 3 4jvar5 987 var6...

日積月累 day3

sector 扇區,段 分段 vertically 豎直地,直立地 horizonally 水平地backspace 退格,回退 terminate 端接,終止 drag 拖,拉,牽,拽 formatted 有格式的 underscore 在.下面劃線 initially 最初,開頭 reforma...