首页 > 编程语言 >C++的数据类型

C++的数据类型

时间:2024-03-27 12:32:13浏览次数:21  
标签:符号 小写字母 数据类型 long 大写字母 int C++

1、整型的基本概念

C++用int关键字来声明整型变量(int 是 integer 的简写)。

在声明整型变量的时候,可以在int关键字之前加signed、unsigned、short和long四种修饰符。

signed:有符号的,可以表示正数和负数。

unsigned:无符号的,只能表示正数,例如超女的身高和体重等。

short:短的,取值范围小,占用内存少。

long:长的,取值范围大,占用内存多。

类型简写

类型全称

长度

取值范围

short

signed short int

2字节

-32768~32767

unsigned short

unsigned short int

2字节

0~65535

int

signed int

4字节

-2147483648~2147483647

unsigned

unsigned int

4字节

0~4294967295

long

signed long int

8字节

-9223372036854775808~

9223372036854775807

unsigned long

unsigned long int

8字节

0~18446744073709551615

注意:
(1)整数的取值范围与计算机操作系统和C++语言编译器有关,没有一个固定的数值,我们可以根据它占用的内存大小来推断它的取值范围。
        一个位的取值是 0 1 1=21-1
        两个位的取值是 00 01 10 11 3=22-1
        三个位的取值是 000 001 …… 111 7=23-1
                a)一个字节有8个位,表示的数据的取值范围是28-1,即255。
                b)如果占用的内存是两个字节,无符号型取值范围是28ⅹ28-1。
                c)如果占用的内存是四个字节,无符号型取值范围是28ⅹ28ⅹ28ⅹ28-1。
                d)如果占用的内存是八个字节,无符号型取值范围是28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28-1。
                e)如果是有符号,取值范围减半,因为符号占一个位。
                f)计算机用最高位1位来表达符号(0-正数,1-负数),unsigned修饰过的正整数不需要符号位,在表达正整数的时候比signed修饰的正整数取值大一倍。
(2)给整型变量赋值不能超出它的取值范围,否则能产生不可预后的后果。
(3)在实际开发中,为了防止超出取值范围,应该保证有足够的空间。

 2、整数的书写

整数默认是十进制,一个表示十进制的数字不需要任何特殊的格式。

(1)二进制

二进制由 0 和 1 两个数字组成,书写时必须以0b或0B(不区分大小写)开头。

以下是合法的二进制:

int a = 0b101;      // 换算成十进制为 5
int b = -0b110010;  // 换算成十进制为 -50
int c = 0B100001;   // 换算成十进制为 33

以下是非法的二进制:

int m = 101010;  // 无前缀 0B,相当于十进制
int n = 0B410;   // 4不是有效的二进制数字

注意,C++标准并不支持上面的二进制写法,只是有些编译器自己进行了扩展,才支持二进制数字。换句话说,并不是所有的编译器都支持二进制数字,只有一部分编译器支持,并且跟编译器的版本有关系。

(2)八进制

八进制由 0~7 八个数字组成,书写时必须以0开头(注意是数字 0,不是字母 o)。

以下是合法的八进制数:

int a = 015;      // 换算成十进制为 13
int b = -0101;    // 换算成十进制为 -65
int c = 0177777;  // 换算成十进制为 65535

以下是非法的八进制:

int m = 256;   // 无前缀 0,相当于十进制
int n = 03A2;  // A不是有效的八进制数字

(3)十六进制

十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,书写时必须以0x或0X(不区分大小写)开头。

以下是合法的十六进制:

int a = 0X2A;   // 换算成十进制为 42
int b = -0XA0;  // 换算成十进制为 -160
int c = 0xffff;   // 换算成十进制为 65535

以下是非法的十六进制:

int m = 5A;    // 没有前缀 0X,是一个无效数字
int n = 0X3H;  // H不是有效的十六进制数字

(4)需要注意的坑

在C++中,不要在十进制数前面加0,会被编译器当成八进制。

还有,不要随便删掉别人程序中整数前面的0,它不是多余的。

3、C++11的long long类型

在VS中,long是4字节,32位。      -2147483648~2147483647

在Linux中,long是8字节,64位。   -9223372036854775808~9223372036854775807

C++11标准增了long long类型的整数,至少64位,且至少与long一样长

在VS中,long long是8字节,64位。 -9223372036854775808~9223372036854775807

在Linux中,long和long long类型都是8字节,64位。

4、浮点型(实数型)

C++浮点型分三种:float(单精度)、double(双精度)、long double(扩展精度)。

三者的区别是表示有效数字的范围不同。

数据类型

占用空间

有效数字范围

float

4字节

7位有效数字

double

8字节

15~16位有效数字

long double

不少于double

不低于double

注意:
(1)在VS和Linux中,long double占用的内存空间分别是8和16字节。
(2)有效数字包括了小数点前面和后面的数字。
(3)C++缺省显示6位有效数字,如果要显示更多的有效数字,可以用printf()函数。
(4)浮点数的存储方法和整数不一样,比较复杂,如无必要,不用研究。(百度“为什么浮点数的小数位很多”、“为什么浮点数不精确”)
在实际开发中,用整数代替浮点数,整数的运算更快,精度更高。9223372036854775807 

5、字符型的基本概念

字符型(char)占用的内存空间是1个字节,书写用单引号包含。

在内存中,不存放字符本身,而是存放与它对应的编码,即ASCII码。

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是现今最通用的单字节编码方案,包含了33个控制字符(具有特殊含义无法显示的字符)和95个可显示字符。

'X' -> 88  01011000   'a'->97   01100001   '3'->51    00110011

(1)ASCII 控制字符 (0~31)

十进制

符号

中文解释

十进制

符号

中文解释

0

NULL

空字符

16

DLE

数据链路转义

1

SOH

标题开始

17

DC1

设备控制 1

2

STX

正文开始

18

DC2

设备控制 2

3

ETX

正文结束

19

DC3

设备控制 3

4

EOT

传输结束

20

DC4

设备控制 4

5

ENQ

询问

21

NAK

拒绝接收

6

ACK

收到通知

22

SYN

同步空闲

7

BEL

23

ETB

传输块结束

8

BS

退格

24

CAN

取消

9

HT

水平制表符

25

EM

介质中断

10

LF

换行键

26

SUB

替换

11

VT

垂直制表符

27

ESC

换码符

12

FF

换页键

28

FS

文件分隔符

13

CR

回车键

29

GS

组分隔符

14

SO

移出

30

RS

记录分离符

15

SI

移入

31

US

单元分隔符

 (2)ASCII 可显示字符 (32~127)

十进制

符号

中文解释

十进制

符号

中文解释

32

空格

80

P

大写字母 P

33

!

感叹号

81

Q

大写字母 Q

34

"

双引号

82

R

大写字母 R

35

#

井号

83

S

大写字母 S

36

$

美元符

84

T

大写字母 T

37

%

百分号

85

U

大写字母 U

38

&

86

V

大写字母 V

39

'

单引号

87

W

大写字母 W

40

(

左括号

88

X

大写字母 X

41

)

右括号

89

Y

大写字母 Y

42

*

星号

90

Z

大写字母 Z

43

+

加号

91

[

左中括号

44

,

逗号

92

\

斜线

45

-

减号

93

]

右中括号

46

.

句点或小数点

94

^

音调符号

47

/

反斜线

95

_

下划线

48

0

数字0的符号

96

`

重音符

49

1

数字1的符号

97

a

小写字母 a

50

2

数字2的符号

98

b

小写字母 b

51

3

数字3的符号

99

c

小写字母 c

52

4

数字4的符号

100

d

小写字母 d

53

5

数字5的符号

101

e

小写字母 e

54

6

数字6的符号

102

f

小写字母 f

55

7

数字7的符号

103

g

小写字母 g

56

8

数字8的符号

104

h

小写字母 h

57

9

数字9的符号

105

i

小写字母 i

58

:

冒号

106

j

小写字母 j

59

;

分号

107

k

小写字母 k

60

小于

108

l

小写字母 l

61

=

等号

109

m

小写字母 m

62

大于

110

n

小写字母 n

63

?

问号

111

o

小写字母 o

64

@

电子邮件符号

112

p

小写字母 p

65

A

大写字母 A

113

q

小写字母 q

66

B

大写字母 B

114

r

小写字母 r

67

C

大写字母 C

115

s

小写字母 s

68

D

大写字母 D

116

t

小写字母 t

69

E

大写字母 E

117

u

小写字母 u

70

F

大写字母 F

118

v

小写字母 v

71

G

大写字母 G

119

w

小写字母 w

72

H

大写字母 H

120

x

小写字母 x

73

I

大写字母 I

121

y

小写字母 y

74

J

大写字母 J

122

z

小写字母 z

75

K

大写字母 K

123

{

左大括号

76

L

大写字母 L

124

|

竖线

77

M

大写字母 M

125

}

右大括号

78

N

大写字母 N

126

~

波浪号

79

O

大写字母 O

127

删除

a)32是空格。

b)48~57是0到9十个阿拉伯数字;

c)65~90是26个大写英文字母;

d)97~122号是26个小写英文字母;

e)其余的是一些标点符号、运算符号等;

f)第127个字符表示的是键盘上的删除键。

 (3)字符的本质

a)字符的本质是整数,取值范围是0~127。

b)在书写的时候可以用单引号包含,也可以用整数。

c)如果书写的时候用单引号包含,程序执行的时候,将把符号解释为对应的整数。

d)显示的时候,把整数解释为对应的符号,也可以直接显示整数。

d)可以与整数进行任何运算,运算的时候,书写方式可以用字符,也可以用整数。

e)C++为什么没有提供1字节的整型?

f)字符型也可以用unsigned修饰,意义何在?

6、转义字符

在C++程序中,使用转义字符的原因有两个:
(1)控制字符没有符号,无法书写,只能用其它的符号代替。
(2)某些符号已被C++征用,语义冲突,只能用其它的符号代替。

ASCII码值

转义字符

含义

0

\0

空,给字符型变量赋值时可以直接书写0。

10

\n

换行(LF) ,将当前位置移到下一行开头

13

\r

回车(CR) ,将当前位置移到本行开头

9

\t

水平制表(HT) (跳到下一个TAB位置)

92

\\

斜线

34

\"

双引号,书写字符时不必转义。

39

\'

单引号,书写字符串中不必转义。

7

\a

警报

8

\b

退格(BS) ,将当前位置移到前一列

12

\f

换页(FF),将当前位置移到下页开头

11

\v

垂直制表(VT)

 7、C++11的原始字面量

 原始字面量(值)可以直接表示字符串的实际含义,不需要转义和连接。

语法:
R"(字符串的内容)"
R"xxx(字符串的内容)xxx"

8、字符串型

C++风格字符串:

string 变量名="字符串的内容" ;

C风格字符串:

char 变量名[]="字符串的内容" ;

C风格字符串的本质是字符数组,C++风格字符串的本质是类,它封装了C风格字符串。
C++风格字符串的常用操作:

赋值:变量名="字符串的内容" ;
拼接:变量名=变量名+"字符串的内容一"+"字符串的内容一"+......+"字符串的内容n" ;

如果字符串的内容都是常量,不要写加号(+),如果内容很长,可以分成多行书写。

比较:支持==、!=、>和<关系运算符,常用的是==和!=。

 9、布尔型

在C和C++中,关系运算和逻辑运算的结果有两种:真和假。

C语言用0表示假,非0表示真。

为了提高代码的可读性,C++新增了 bool 类型,占用1字节的内存,用true表示真,false表示假。

bool类型本质上是1字节的整数(unsigned char),取值只有1和0。

在程序中,书写的时候可以用true和false,编译器把它们解释为1和0。

如果对bool型变量赋非0的值,将转换成1。

用cin输入和cout输出的时候,仍是1和0,不会被解释为true和false。

 10、数据类型的转换

计算机进行运算时,要求各操作数的类型具有相同的大小和存储方式。

在实际开发中,不同类型的数据进行混合运算是基本需求。

自动类型转换:某些类型的转换编译器可以隐式的进行,不需程序员干预。

强制类型转换:有些类型的转换需要程序员显式指定。

(1)自动类型转换

不同数据类型的差别在于取值范围和精度,数据的取值范围越大,精度越高。
整型从低到高:

char -> short -> int -> long -> long long

浮点型从低到高:

float -> double -> long double

自动类型转换的规则如下:
        a)如果一个表达式中出现了不同类型操作数的混合运算,较低类型将自动向较高类型转换。
        b)当表达式中含有浮点型操作数时,所有操作数都将转换为浮点型。
        c)赋值运算的右值类型与左值类型不一致时,将右值类型提升/降低为左值类型。
        d)赋值运算右值超出了左值类型的表示范围,把该右值截断后赋给左值,所得结果可能毫无意义。

(2)强制类型转换

 为了让程序设计更灵活,转换的目的更清晰,C++提供了强制类型转换的方法,也称之为显式转换。

强制类型转换的语法:(目标类型)表达式或目标类型(表达式)

注意:
a)如果使用强制转换,表示程序员已有明确的目的。
b)如果转换的行为不符合理,后果由程序员承担。
c)如果采用了强制类型转换,编译的告警信息将不再出现。
d)类型转换运算符的优先级比较高,如果没把握就加括号。

 11、数据类型的别名typedef

创建数据类型的别名有两个目的:
(1)为名称复杂的类型创建别名,方便书写和记忆。
(2)创建与平台无关的数据类型,提高程序的兼容性。

语法:typedef 原数据类型名 别名;

 C++11还可以用using关键字创建数据类型的别名。

语法:using 别名=原数据类型名;

标签:符号,小写字母,数据类型,long,大写字母,int,C++
From: https://blog.csdn.net/m0_69452758/article/details/137070840

相关文章

  • 使用C++20协程和io_uring优雅地实现异步IO
    距离2020年已经过去很久了,各大编译器对于C++20各项标准的支持也日趋完善,无栈协程也是其中之一,所以我就尝试着拿协程与io_uring实现了一下proactor模式,这篇文章用来记录一下我的设计和想法。除此之外,我们能在网络上找到许多优秀的C++20协程的教程以及许多优秀的协程应用(库),但从协程......
  • FFMPEG C++封装(一)(C++ FFMPEG)
    1概述FFMPEG是一个C语言开源视音频编解码库。本文将FFMPG4.1.3进行C++封装,形成C++FFMPG库。2架构架构图如下所示:架构说明:Init初始化FFMPEG库。IStream输入流,FFMPEG的输入音视频文件。Packet音视频数据包Decoder音视频编码器Frame音视频帧FilterGraph音视频......
  • 【蓝桥杯选拔赛真题48】C++九进制回文数 第十四届蓝桥杯青少年创意编程大赛 算法思维
    目录C++九进制回文数一、题目要求1、编程实现2、输入输出二、算法分析三、程序编写四、程序说明五、运行结果六、考点分析七、推荐资料C++九进制回文数第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题一、题目要求1、编程实现提示信息:回文数:反向排列与原......
  • C/C++整形变量溢出问题
    参考C语言的整型溢出问题|酷壳-CoolShell   概述整形溢出分为无符号(unsigned)整型溢出和有符号(signed)整型溢出无符号整型溢出对于unsigned整型溢出,C的规范是有定义的——“溢出后的数会以2^(8*sizeof(type))作模运算”比如,两个unsignedint类型求和溢出......
  • C++ map踩坑
    目录!!!不要直接使用[]来操作map,否则会有意想不到的错误。尽量使用map提供的函数(count、find、insert、erase)来操作map242.有效的字母异位词描述:给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t......
  • 第二讲 C语言中的数据类型和变量
    1数据类型介绍C语言提供了丰富的数据类型来描述生活中的各种数据。使用整形类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数。下列是C语言提供的各种数据类型:1.1字符型char[signed]char //有符号的unsignedchar //无符号的1.2整型//短整型......
  • C++ 用户输入与数据类型详解:建立基本计算器及变量类型
    C++用户输入你已经学习了cout用于输出(打印)值。现在我们将使用cin来获取用户输入。cin是一个预定义变量,它使用提取运算符(>>)从键盘读取数据。在下面的示例中,用户可以输入一个数字,该数字存储在变量x中。然后我们打印x的值:示例intx;cout<<"Typeanumber:";//......
  • C++ 用户输入与数据类型详解:建立基本计算器及变量类型
    C++用户输入你已经学习了cout用于输出(打印)值。现在我们将使用cin来获取用户输入。cin是一个预定义变量,它使用提取运算符(>>)从键盘读取数据。在下面的示例中,用户可以输入一个数字,该数字存储在变量x中。然后我们打印x的值:示例intx;cout<<"Typeanumber:"......
  • C++文件类(文件流类)及用法详解
    open()fstreamifstreamofstream打开指定文件,使其与文件流对象相关联。is_open()检查指定文件是否已打开。close()关闭文件,切断和文件流对象的关联。swap()交换2个文件流对象。operator>>fstreamifstream重载>>运算符,用于从指定文件中读取数据。gcoun......
  • 蓝桥杯 试题 基础练习 十进制转十六进制 C++
    问题描述十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制......