整數: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。常量 在程式執行過程中,其值不能被改變的量稱為常量。變數 變數代表記憶體中具有特...