C语言 | 02 数据类型及其运算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36292543/article/details/88640198

2.1 C的数据类型

2.1.1 C语言关键字

2.1.2 数据类型

数据类型的作用:编译器预算对象(变量)分配的内存空间大小。

1整型:int

一、 整型变量的定义和输出

打印格式

含义

%d

输出一个有符号的10进制int类型

%o(字母o)

输出8进制的int类型

%x

输出16进制的int类型,字母以小写输出

%X

输出16进制的int类型,字母以大写输出

%u

输出一个10进制的无符号数

#include <stdio.h>



int main()

{

int a = 123; //定义变量a,以10进制方式赋值为123

int b = 0567; //定义变量b,以8进制方式赋值为0567

int c = 0xabc; //定义变量c,以16进制方式赋值为0xabc



printf("a = %d\n", a);

printf("8进制:b = %o\n", b);

printf("10进制:b = %d\n", b);

printf("16进制:c = %x\n", c);

printf("16进制:c = %X\n", c);

printf("10进制:c = %d\n", c);



unsigned int d = 0xffffffff; //定义无符号int变量d,以16进制方式赋值

printf("有符号方式打印:d = %d\n", d);

printf("无符号方式打印:d = %u\n", d);

return 0;

}

二、 整型变量的输入

#include <stdio.h>



int main()

{

int a;

printf("请输入a的值:");



//不要加“\n”

scanf("%d", &a);



printf("a = %d\n", a); //打印a的值



return 0;

}

三、 short、int、long、long long

数据类型

占用空间

short(短整型)

2字节

int(整型)

4字节

long(长整形)

Windows为4字节,Linux为4字节(32位),8字节(64位)

long long(长长整形)

8字节

注意:

  1. 需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然 C 语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型, short 类型整数的长度不能长于 int 类型。
  2. 当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。

2) 字符型:char

一、 字符变量的定义和输出

字符型变量用于存储一个单一字符,在 C 语言中用 char 表示,其中每个字符变量都会占用 1 个字节。在给字符型变量赋值时,需要用一对英文半角格式的单引号(' ')把字符括起来。

字符变量实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的 ASCII 编码放到变量的存储单元中。char的本质就是一个1字节大小的整型

#include <stdio.h>



int main()

{

char ch = 'a';

printf("sizeof(ch) = %u\n", sizeof(ch));



printf("ch[%%c] = %c\n", ch); //打印字符

printf("ch[%%d] = %d\n", ch); //打印‘a’ ASCII的值



char A = 'A';

char a = 'a';

printf("a = %d\n", a); //97

printf("A = %d\n", A);     //65



printf("A = %c\n", 'a' - 32); //小写a转大写A

printf("a = %c\n", 'A' + 32); //大写A转小写a



ch = ' ';

printf("空字符:%d\n", ch); //空字符ASCII的值为32

printf("A = %c\n", 'a' - ' '); //小写a转大写A

printf("a = %c\n", 'A' + ' '); //大写A转小写a



return 0;

}

二、 字符变量的输入

#include <stdio.h>



int main()

{

char ch;

printf("请输入ch的值:");



//不要加“\n”

scanf("%c", &ch);

printf("ch = %c\n", ch); //打印ch的字符



return 0;

}

三、 ASCII对照表

ASCII值

控制字符

ASCII值

字符

ASCII值

字符

ASCII值

字符

0

NUT

32

(space)

64

@

96

1

SOH

33

!

65

A

97

a

2

STX

34

"

66

B

98

b

3

ETX

35

#

67

C

99

c

4

EOT

36

$

68

D

100

d

5

ENQ

37

%

69

E

101

e

6

ACK

38

&

70

F

102

f

7

BEL

39

,

71

G

103

g

8

BS

40

(

72

H

104

h

9

HT

41

)

73

I

105

i

10

LF

42

*

74

J

106

j

11

VT

43

+

75

K

107

k

12

FF

44

,

76

L

108

l

13

CR

45

-

77

M

109

m

14

SO

46

.

78

N

110

n

15

SI

47

/

79

O

111

o

16

DLE

48

0

80

P

112

p

17

DCI

49

1

81

Q

113

q

18

DC2

50

2

82

R

114

r

19

DC3

51

3

83

S

115

s

20

DC4

52

4

84

T

116

t

21

NAK

53

5

85

U

117

u

22

SYN

54

6

86

V

118

v

23

TB

55

7

87

W

119

w

24

CAN

56

8

88

X

120

x

25

EM

57

9

89

Y

121

y

26

SUB

58

:

90

Z

122

z

27

ESC

59

;

91

[

123

{

28

FS

60

<

92

/

124

|

29

GS

61

=

93

]

125

}

30

RS

62

>

94

^

126

`

31

US

63

?

95

_

127

DEL

 

ASCII 码大致由以下两部分组成:

  1. ASCII 非打印控制字符: ASCII 表上的数字 0-31 分配给了控制字符,用于控制像打印机等一些外围设备。
  2. ASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。数字 127 代表 Del 命令。

 

3) 实型(浮点型):float、double

实型变量也可以称为浮点型变量,浮点型变量是用来存储小数数值的。在C语言中, 浮点型变量分为两种: 单精度浮点数(float)、 双精度浮点数(double), 但是double型变量所表示的浮点数比 float 型变量更精确。

数据类型

占用空间

有效数字范围

float

4字节

31位有效数字

double

8字节

6364位有效数字

由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。

不以f结尾的常量是double类型,以f结尾的常量(如3.14f)是float类型。

#include <stdio.h>

 

int main()

{

//传统方式赋值

float a = 3.14f; //或3.14F

double b = 3.14;

 

printf("a = %f\n", a);

printf("b = %lf\n", b);

 

//科学法赋值

a = 3.2e3f; //3.2*1000 = 3200,e可以写E

printf("a1 = %f\n", a);

 

a = 100e-3f; //100*0.001 = 0.1

printf("a2 = %f\n", a);

 

a = 3.1415926f;

printf("a3 = %f\n", a); //结果为3.141593

 

return 0;

}

 

2.1.3 常量

常量:

  1. 在程序运行过程中,其值不能被改变的量
  2. 常量一般出现在表达式或赋值语句中

整型常量

100,200,-100,0

实型常量

3.14 , 0.125,-3.123

字符型常量

‘a’,‘b’,‘1’,‘\n’

字符串常量

“a”,“ab”,“12356”

2.1.4 变量

变量:

  1. 在程序运行过程中,其值可以改变
  2. 变量在使用前必须先定义,定义变量前必须有相应的数据类型

 

2.2 C运算符的种类、运算优先级和结合性

2.2.1 常用运算符分类

运算符类型

作用

算术运算符

用于处理四则运算

赋值运算符

用于将表达式的值赋给变量

比较运算符

用于表达式的比较,并返回一个真值或假值

逻辑运算符

用于根据表达式的值返回真值或假值

位运算符

用于处理数据的位运算

sizeof运算符

用于求字节数长度

2.2.2 算术运算符

运算符

术语

示例

结果

+

正号

+3

3

-

负号

-3

-3

+

10 + 5

15

-

10 - 5

5

*

10 * 5

50

/

10 / 5

2

%

取模(取余)

10 % 3

1

++

前自增

a=2; b=++a;

a=3; b=3;

++

后自增

a=2; b=a++;

b=2; a=3;

--

前自减

a=2; b=--a;

a=1; b=1;

--

后自减

a=2; b=a--;

a=1; b=2;

2.2.3 赋值运算符

运算符

术语

示例

结果

=

赋值

a=2; b=3;

a=2; b=3;

+=

加等于

a=0; a+=2;

a=2;

-=

减等于

a=5; a-=3;

a=2;

*=

乘等于

a=2; a*=2;

a=4;

/=

除等于

a=4; a/=2;

a=2;

%=

模等于

a=3; a%2;

a=1;

2.2.4 比较运算符

C 语言的比较运算中, “用数字1”来表示, “用数字0”来表示。 

运算符

术语

示例

结果

==

相等于

4 == 3

0

!=

不等于

4 != 3

1

<

小于

4 < 3

0

>

大于

4 > 3

1

<=

小于等于

4 <= 3

0

>=

大于等于

4 >= 1

1

2.2.5 逻辑运算符

运算符

术语

示例

结果

!

!a

如果a为假,则!a为真;

如果a为真,则!a为假。

&&

a && b

如果a和b都为真,则结果为真,否则为假。

||

a || b

如果a和b有一个为真,则结果为真,二者都为假时,结果为假。

2.2.6 运算符优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<<

左移

变量<<表达式

左到右

双目运算符

>>

右移

变量>>表达式

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

<

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

15

逗号运算符

表达式,表达式,…

左到右

--

 

 

2.3 不同类型数据间的转换与运算

数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。

转换的方法有两种

  1. 自动转换(隐式转换):遵循一定的规则,由编译系统自动完成。
  2. 强制类型转换:把表达式的运算结果强制转换成所需的数据类型。

类型转换的原则:占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。

2.3.1 隐式转换

#include <stdio.h>

 

int main()

{

int num = 5;

printf("s1=%d\n", num / 2);

printf("s2=%lf\n", num / 2.0);

 

return 0;

}

2.3.2 强制转换

强制类型转换指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,其基本语法格式如下所示:

(类型说明符) (表达式)

#include <stdio.h>

 

int main()

{

float x = 0;

int i = 0;

x = 3.6f;

 

i = x; //x为实型, i为整型,直接赋值会有警告

i = (int)x; //使用强制类型转换

 

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

 

return 0;

}

 

2.4 C表达式类型

 

猜你喜欢

转载自blog.csdn.net/qq_36292543/article/details/88640198