C語言入門 資料型別

2022-02-25 08:12:36 字數 4372 閱讀 7556

整數:char、short、int、long、longlong

浮點型:float、double、long double

邏輯:bool

指標自定義型別

型別有何不同

型別名稱:int、long、double

輸入輸出的格式化:%d、%ld、%lf

所表達的數的範圍:char記憶體所佔的大小:1個位元組到16個位元組

記憶體中的表達形式:二進位制(補碼)、編碼

sizeof

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

是乙個靜態運算子,它的結果在編譯的時候就決定了,不要在sizeof的括號中做運算

sizeof(int)

sizeof(i)

#include int main()

//sizeof(int)=4

//sizeof(double)=8

//sizeof(a)=4

char:1位元組(8位元)

short:2位元組

int:取決於編譯器(cpu),通常是意義上的1個字

long:取決於編譯器(cpu),通常是意義上的1個字

longlong :8位元組

整數內部表達

計算機內部一切都是二進位制

18 ------> 00010010

0 ------> 000000

-18 ------> ?

負數以原碼的補碼形式表達

反碼:

正數的反碼與原碼相同,負數的反碼為對該數的原碼除符號位外各位取反[每一位取反(除符號位)]。 取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)

補碼:

補碼 = 反碼 + 1

這裡用-1來進行舉例子

二進位制:00000001 (1)

反碼:11111110

補碼:11111111

所以-1在計算機裡用二進位制表達就是全1

總結:

正數的反碼和補碼都與原碼相同

負數的反碼為對該數的原碼除符號位外各位取反

負數的補碼為對該數的原碼除符號位外各位取反,然後在最後一位加1

整數的範圍

對於乙個位元組(8位),可以表示:00000000-11111111

其中:char :1位元組:-128~127

short:2位元組:-32768~32767

int:取決於編譯器(cpu),通常的意義是「1個字」

long:4位元組

longlong:8位元組

unsigned

如果乙個常量想要表達自己是unsigned,可以在後面加乙個u或者u

用l或者l表示long

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

#include int main()

整數越界

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

11111111 + 1 ------> 100000000 ------> 0

01111111 + 1 ------> 10000000 ------> -128

10000000 - 1 ------> 01111111 ------> 127

也就是在計算機中 127 + 1 = -128,-128 -1 = 127

char a = 127;

char b = -128;

char c = a + 1;

char d = b - 1;

printf("%d, %d\n", c , d );

// -128, 127

如圖所示:順時針為減、逆時針為加

整數的輸入和輸出

只有兩種形式:int或者long long

%d:int

%u:unsigned

%ld:long long

%lu:unsigned long long

8進製和16進製制

乙個以0開始的數字字面量是8進製

乙個以0x開始的數字字面量是16進製制

%o用於8進製,%x用於16進製制

8進製和16進製制只是如何把數字表達為字串,與內部如何表達數字無關

char c = 012;

int i = 0x12;

printf("c=%d, i=%d\n", c,i);

printf("c=0%o, i=0x%x\n", c,i);

// c=10, i=18

// c=012, i=0x12

選擇整數型別

沒有特別的需要,就選擇int

型別字長

範圍有效數字

float327

double

6415

輸入和輸出

型別scanf

printf

float

%f%f、%e

double

%lf%f、%e

其中%e是科學計數法

#include int main()

輸出精度

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

超出範圍的浮點數

printf輸出inf表示超出範圍的浮點數:+∞、-∞

printf輸出nan表示不存在的浮點數

浮點運算的精度

float a , b , c ;

a = 1.345f;

b = 1.123f;

if (c == 2.468)

else

//不相等

帶小數點的字面量是double而不是float

float需要用f或者f字尾來表明身份

選擇浮點型別

沒有特殊的需要直接用double

字元型別

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

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

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

char c;

c = '1';

printf("%d\n", c); // 49 ascll

printf("%c\n", c); // 1

逃逸字元

用來表達無法列印出來的控制字元或者特殊字元,它是由乙個反斜槓 \ 開頭,後面跟上另乙個字元 ,然後組成乙個字元

printf("請輸入身高和體重,如果輸入\"170 80\"表示170cm和80kg\n");
\b : 回退一格 、\t : 到下乙個**位

\n : 換行 、 \r:回車

" :雙引號 、 ':單引號

\ : 反斜槓本身

自動型別轉換

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

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

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

強制型別轉換

(型別)值

例如:(int)10.2

強制型別轉換的優先順序高於四則運算符

bool

然後就可以使用bool和true、false

#include #include int main()

邏輯運算子是對邏輯的運算,結果只有0或者1

運算子描述

示例結果

!邏輯非

!a&&

邏輯與a && b

||邏輯或

a||b

優先順序如圖所示:

短路邏輯運算子是自左向右進行的,如果左邊的結果已經能決定結果了,就不會做右邊的計算

對於&&,左邊是false時就不做右邊了

對於||,左邊是true時就不做右邊了

條件運算子

count = (count > 20) ? count - 10 : count + 10;

條件、條件滿足時的值、條件不滿足的值

逗號運算

int i,j;

i = 3+4,5+6;

j = (3+4,5+6);

printf("%d\n", i);

printf("%d\n", j);

// 7

// 11

當有括號時,計算的是第二個表示式

C語言入門 資料型別

免費 整數 char short int long longlong 浮點型 float double long double 邏輯 bool 指標自定義型別 型別有何不同 型別名稱 int long double 輸入輸出的格式化 d ld lf 所表達的數的範圍 char記憶體所佔的大小 1個位...

C語言資料型別與指標入門

include 尋找系統的資源 尋找我們自己的資源 h hpp 為標頭檔案 c cpp 為實現檔案 執行結果.png 型別位元組值範圍 char 1位元組 128 127或 0 255 unsigned char 1位元組0 255 signed char 1位元組 128 127 int2 或 4...

C語言 資料型別

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