搜尋熱詞
一、C語言的類型
整數: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()
{
int a;
a = 6;
printf("sizeof(int)=%ld\n",sizeof(int));
printf("sizeof(double)=%ld\n",sizeof(double));
printf("sizeof(a)=%ld\n",sizeof(a));
return 0;
}
//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
其中:
00000000 ------> 0
11111111 ~~~ 10000000 ------> -1 ~~ -128
00000001 ~~~ 01111111 ------> 1 ~ 127
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()
{
unsigned char c = 255;
int i = 255;
printf("c=%d,i=%d\n",c,i);
// c=-1,i=255
// 當使用了unsigned之後 c=255,i=255
return 0;
}
整數越界
整數是以純二進制方式進行計算的,是以
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",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);
printf("c=0%o,i=0x%x\n",i);
// c=10,i=18
// c=012,i=0x12
選擇整數類型
沒有特别的需要,就選擇int
三、浮點類型
類型
字長
範圍
有效數字
float
32
7
double
64
15
輸入和輸出
類型
scanf
printf
float
%f
%f、%e
double
%lf
%f、%e
其中%e是科學計數法
#include
int main()
{
double a = 12.321;
printf("%e\n",a );
//1.232100e+001
return 0;
}
輸出精度
在%和f之間加上.n可以指定輸出小數點後幾位,這樣的輸出是做4舍5入的
超出範圍的浮點數
printf輸出inf表示超出範圍的浮點數:+∞、-∞
printf輸出nan表示不存在的浮點數
浮點運算的精度
float a,b,c ;
a = 1.345f;
b = 1.123f;
if (c == 2.468)
{
printf("相等\n");
}else
{
printf("不相等\n");
}
//不相等
帶小數點的字面量是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
include
然後就可以使用bool和true、false
#include
#include
int main()
{
bool b = 6 > 5;
bool t = true;
printf("%d\n",b);
// 1
return 0;
}
四、邏輯運算符
邏輯運算符是對邏輯的運算,結果隻有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語言入門-資料類型全部内容,希望文章能夠幫你解決C語言入門-資料類型所遇到的程式開發問題。
如果覺得程式設計之家網站内容還不錯,歡迎将程式設計之家網站推薦給程式員好友。
本圖文内容來源于網友網絡收集整理提供,作為學習參考使用,版權屬于原作者。