0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++内置基本数据类型

jf_78858299 来源: QStack 作者: 月下西楼 2023-03-17 14:53 次阅读

前言

每一种编程语言都会提供一些与其他语言不同的特性,这也是它产生的原因,但是作为编程语言,它也会保留所有编程语言的共性,例如一些基本类型,整形,浮点型,字符等,还有变量、表达式和控制流,所有的编程语言这些部分都不会有很大差异。

基本数据类型

基本的数据类型是每一个语言的基础,数据的类型决定了数据的含义以及数据所支持的操作,不同的数据类型相同的操作结果可能完全不同,例如同样的表达式a + b,如果a和b是整型,那么a + b的结果就是二者的和,如果a和b是字符串,a + b的结果就是字符串的拼接。C++提供了很多基本的数据类型,大致可以分为两类,一类是算数类型如整型和浮点型等,一类的是特殊的void类型,void类型没有关联的值,只用于一些特殊的场景,例如函数没有返回值。

算术类型

C++提供了以下的算术基本类型,C++的算术基本类型又可以分为整数类型和浮点型,其具体情况如下,数据类型占据的空间与平台相关,表中是最小占据的空间。

类型 说明 最小空间
bool 布尔类型 NA
char 字符类型 8bits
w_char_t 长字符类型 16bits
char16_t unicode 字符 16bits
char32_t uincode 字符 32bits
short 短整型 16bits
int 整型 16bits
long 长整型 32bits
long long 长整型 64bits
float 单精度浮点型 6位有效数字
double 双精度浮点型 10位有效数字
long double 扩展精度浮点型 10位有效数字
signed和unsigned

除了布尔类型和扩展字符类型,整型可以是有符号的也可是无符号的,short,int, long这些都是默认有符号的,有符号整型存储的时候第一个数字代表符号,其可以是负的,也可以是正的。无符号类型都是大于或等于0的,想获得无符号整型只需要在相应的类型前加上unsigned即可,如unsigned short。

需要注意的是char也有三个类型,char, unsigned char和signed char,说是三种类型其实只有两种类型就是无符号字符和有符号字符,其中char是有符号或无符号是与编译器相关的,所以在使用char时最好注明是有符号还是无符号的。

C语言一样,C++也是非常接近硬件的语言,为了适应很多品类繁多的硬件,应该通过更加严格的类型定义来避免歧义,在不同的硬件上行为保持一致。在选择类型时有以下几条意见:

  • 如果明确不会为负时使用无符号类型。
  • 在使用整型时通常使用int,short通常太小,long通常和int大小相同,如果值大于int规定的占最小空间的最大值则使用longlong。
  • 尽量不要直接使用char,而是使用unsigned char和signed char,因为char是有符号或是无符号在不同编译器上是不同的。
  • 对于浮点数尽量使用double,因为float进度通常不够,而且在一些机器上double运算要比float快。

类型转换

在程序中操作数的类型是由其值和使用形式所共同决定的,类型转换是指操作数的类型会自动转换为我们所希望的类型,这么说可能有点抽象,以例子说明,42在正常使用过程是整型,可以实现各种算术操作,但是在以下情况会 转化为布尔类型。

# include
int main(){
    if (42) {
        std::cout<<"42是布尔类型"<

当我们将一个算术类型转化为一个非算术类型,其结果取决于其值的范围:

  • 当将一个非布尔类型的值赋予一个布尔类型的值时,如果该值等于0则是false,反之则是true。
  • 当将一个bool类型的值赋予一个非bool类型的值时,如果是true则转化为1,false则转化为0。
  • 当将一个浮点型的值赋予一个整型,该值则会被截断,只会保留小数点前的整数部分。
  • 当将一个整型的值赋予一个浮点型,其小数部分则为0.
  • 当赋予一个无符号类型超出其范围的值,其结果就是该值除余该类型最大值的结果,如将-1赋予8bit的unsiged char,其结果就是255。
  • 当赋予一个有符号类型一个超出其范围的值,其结果不可知,可能正常运行,可能会crash,也有可能产生垃圾数据。
表达式中包含无符号类型

虽然我们不希望将一个负值赋予无符号类型,但是这个错误很容易在无意识的情况下触发,例如在一个算数表达式中如果包含无符号数和符号数,其会将符号数自动转化为无符号数,其例子如下。

# include
int main() {
   int a = -40;
   unsigned b = 10;
   std::cout<return 0;
}

[

其结果为

4294967266
20

还有就是在循环中使用无符号数,可能会造成死循环,例子如下,当i为-1时会转化为无符号数,会一直循环下去。

# include
int main() {
  for (unsigned i = 11; i >= 0; --i) {
    std::cout<

❝尽量不要将无符号数与符号数混用,如果混用要确保其不会超出范围。

变量

变量是用来存储程序操作的数据,C++是一个强类型的语言,在声明一个变量时必须要指定其类型,声明的类型决定其在内存中存储方式以及可以执行的操作。C++的声明变量的方式很简单,首先是数据类型,后面跟着一个或多个变量名,也可以在声明时初始化(可选),变量名以逗号隔开,最后以分号结尾

int a = 0, b, c;

❝初始化并不等于赋值,初始化是指在变量被创建时赋予其一个值,而赋值是指改变变量当前的值并赋予其一个新值。

初始化

C++有很多的初始化方式,如下就有三种初始化方法。

# include
int main() {
    int a = 0;
    int b = {0};
    int d(0);
    std::cout<

当一个变量在声明时没有主动进行初始化时,会赋予一个默认初始化值,其值取决于它的位置和类型,内置类型如果没有初始化且不在任何函数体内,则其值为0,如果在函数体内则是undefined,获取或者操作undefined值可能会发生未知的错误。

声明与定义

C++支持独立编译,也就是说C++支持将我们的程序分割为多个文件,且每个文件都能独立编译,当我们将程序分割为多个文件时就牵扯到文件间的数据共享,一个文件可能需要使用其他文件定义的变量,例如我们使用std::cout,为了支持这种独立编译,C++将声明与定义分割开,声明是指让程序知道这个名字,当一个文件需要使用一个变量时,只要引入此变量的声明即可,定义是指创建相关的实体。声明是指确定了类型与名字,但是并未赋值,连默认的赋值都没有,也没有申请内存,而定义则是申请两内存,也赋值两。为了区分声明和定义,C++提供了extern关键字。

extern int i ;//声明里但未定义
 int j;//声明且定义了

]()

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    10

    文章

    1936

    浏览量

    34574
  • 字符
    +关注

    关注

    0

    文章

    232

    浏览量

    25166
  • C++
    C++
    +关注

    关注

    22

    文章

    2104

    浏览量

    73469
收藏 人收藏

    评论

    相关推荐

    C语言中的基本数据类型

    C语言是非常重要的一门程序设计语言,学好C语言再去学习其他编程语言将变得很轻松,因为大部分语言的都有相同的共性存在。本节我们来讲解一下C语言中的基本数据类型,掌握如何使用变量以及变量在
    发表于 04-26 17:33 1966次阅读
    <b class='flag-5'>C</b>语言中的基<b class='flag-5'>本数据类型</b>

    C语言中基本数据类型、变量和常量的使用

    C语言中基本数据类型、变量和常量的使用
    发表于 08-18 16:42 2487次阅读
    <b class='flag-5'>C</b>语言中基<b class='flag-5'>本数据类型</b>、变量和常量的使用

    技术干货驿站 ▏深入理解C语言:基本数据类型和变量

    C语言中,数据类型和变量是编程的基础,也是理解更复杂概念的关键。数据类型决定了变量的内存分配、存储范围和操作方式,而变量则是存储数据的容器。本篇文章将从基
    的头像 发表于 07-26 17:53 1895次阅读
    技术干货驿站 ▏深入理解<b class='flag-5'>C</b>语言:基<b class='flag-5'>本数据类型</b>和变量

    Java基本数据类型之间的运算规则是什么?

    Java基本数据类型Java变量的使用说明Java基本数据类型之间的运算规则
    发表于 11-04 09:59

    C语言的基本数据类型包括哪几种

    C语言的基本数据类型包括哪几种?分别是什么?
    发表于 10-14 12:27

    浅析C51的基本数据类型和扩充数据类型

    本数据类型:扩充数据类型
    发表于 11-22 06:05

    C预处理与C语言基本数据类型

    指令表:注意:宏名的书写由标识符与两边各两条下划线构成。C语言基本数据类型不同操作系统中数据类型所占字节数图解数据类型的其他分类:变量常量(字面量和const常量)void(特殊
    发表于 12-21 08:29

    C++教程第三章数据类型

    C++教程第三章数据类型 什么是数据类型一定的数据在计算机的内部表示;该数据所表示的值的集合;在该
    发表于 05-15 17:56 48次下载

    C++入门教程之数据类型、运算符和表达式的详细资料说明

    本文档的详细介绍的是C++入门教程之数据类型、运算符和表达式的详细资料说明。主要内容包括了: 基本数据类型 常量和变量 输入输出 运算符和表达式 数据类型的转换 构造
    发表于 02-15 11:26 2次下载
    <b class='flag-5'>C++</b>入门教程之<b class='flag-5'>数据类型</b>、运算符和表达式的详细资料说明

    51单片机学习笔记(9)——C51的基本数据类型和扩充数据类型

    本数据类型:扩充数据类型
    发表于 11-14 13:36 1次下载
    51单片机学习笔记(9)——<b class='flag-5'>C</b>51的基<b class='flag-5'>本数据类型</b>和扩充<b class='flag-5'>数据类型</b>

    C51基本数据类型

    其中 (1)bit、sbit、sfr、sfr16是C51扩展数据类型,数标准C没有的 (2)定义的数据类型存储在RAM中,以单片机AT89S52为例,RAM大小为256byte
    发表于 11-25 17:51 56次下载
    <b class='flag-5'>C</b>51基<b class='flag-5'>本数据类型</b>

    C语言-基本数据类型与位运算

    这篇文章作为基础知识点,总结C语言的基本数据类型有哪些,浮点数的精度,整数变量的空间范围,变量定义语法,变量命名规则,浮点数打印格式,基本数据类型printf对应的打印、位运算的知识点。
    的头像 发表于 08-14 09:56 1531次阅读

    Python最基本内置数据类型(1)

    最基本内置数据类型 1. 基本数据类型和运算符 python中变量没有类型,但是对象都有类型 python中最基本的
    的头像 发表于 03-08 17:17 844次阅读
    Python最基本<b class='flag-5'>内置</b><b class='flag-5'>数据类型</b>(1)

    本数据类型分享

    本数据类型本数据类型:包括位、位序列、整数、浮点数、日期时间。此外字符也属于基本数据类型,请参见文档String与WString。 1.位和位序列 2.整数数据类型 3.浮点型实
    的头像 发表于 06-13 14:14 9435次阅读
    基<b class='flag-5'>本数据类型</b>分享

    javascript的基本数据类型有哪些

    JavaScript 是一种动态的、面向对象的编程语言,广泛应用于 Web 开发中。在 JavaScript 中,有七种基本数据类型(Primitive Types),它们分别是 Undefined
    的头像 发表于 12-03 11:17 726次阅读