天天看點

c語言入門資料類型詳解,C語言入門-資料類型

搜尋熱詞

一、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語言入門-資料類型所遇到的程式開發問題。

如果覺得程式設計之家網站内容還不錯,歡迎将程式設計之家網站推薦給程式員好友。

本圖文内容來源于網友網絡收集整理提供,作為學習參考使用,版權屬于原作者。