「C++系列」C++ 数据类型

文章目录

  • 一、C++ 数据类型
  • 二、C++ 数据类型占位与范围
  • 三、类型转换
    • 1. 隐式类型转换(Automatic Type Conversion)
    • 2. 显式类型转换(Explicit Type Conversion)
    • 3. 示例代码
  • 四、数据类型案例
    • 1. 整型
    • 2. 浮点型
    • 3. 字符型
    • 4. 布尔型
    • 5. 枚举类型
    • 6. 指针类型
    • 7. 引用类型
  • 五、相关链接

在这里插入图片描述

一、C++ 数据类型

C++ 数据类型定义了存储在变量中的数据的种类,不同的数据类型决定了数据在内存中的存储方式,以及它们可以执行的操作。以下是C++中的基本数据类型:

  1. 整型(Integer Types)
  • int:有符号整数类型,根据编译器和系统架构的不同,其大小通常为16位、32位或64位。
  • short:有符号短整型,通常比int小。
  • long:有符号长整型,通常比int大。
  • long long:有符号长长整型,比long更大。
  • 无符号整型:每种整型都有对应的无符号版本(例如unsigned intunsigned shortunsigned longunsigned long long),它们只能存储非负整数。
  1. 浮点型(Floating-Point Types)
  • float:单精度浮点型,用于存储带小数点的数,通常占用4个字节。
  • double:双精度浮点型,比float具有更高的精度和更大的范围,通常占用8个字节。
  • long double:长双精度浮点型,比double具有更高的精度。
  1. 字符型(Character Types)
  • char:字符型,用于存储单个字符(如字母、数字、标点符号等)。实际上,char是整型的一种特殊形式,可以参与整数运算。字符类型有charsigned charunsigned char之分,具体有无符号由编译器决定。
  1. 布尔型(Boolean Type)
  • bool:布尔型只有两个值:truefalse,常用于条件判断和逻辑运算。在C++中,布尔类型会被自动转换为整型,其中true对应的整数值为1,false对应的整数值为0。
  1. 宽字符型(Wide Character Type)
  • wchar_t:用于存储宽字符(如Unicode字符)。
  1. 枚举类型(Enumeration Types)
  • 枚举类型是一种用户定义的数据类型,允许为整数常量指定一个名称,使代码更易于阅读和维护。例如:enum Color { RED, GREEN, BLUE };
  1. 指针类型(Pointer Types)
  • 指针类型是一种特殊的数据类型,用于存储内存地址。指针变量可以指向任何类型的内存地址,包括变量、数组、函数等。
  1. 引用类型(Reference Types)
  • 引用是C++中的另一种特殊数据类型,允许为变量创建一个别名。引用在声明时必须初始化,并且一旦初始化,就不能再指向其他变量。

二、C++ 数据类型占位与范围

类型范围
char1 个字节-128 到 127 或者 0 到 255
unsigned char1 个字节0 到 255
signed char1 个字节-128 到 127
int4 个字节-2147483648 到 2147483647
unsigned int4 个字节0 到 4294967295
signed int4 个字节-2147483648 到 2147483647
short int2 个字节-32768 到 32767
unsigned short int2 个字节0 到 65,535
signed short int2 个字节-32768 到 32767
long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int8 个字节0 到 18,446,744,073,709,551,615
float4 个字节精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
double8 个字节双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
long long8 个字节双精度型占8 个字节(64位)内存空间,表示 -9,223,372,036,854,775,807 到 9,223,372,036,854,775,807 的范围
long double16 个字节长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。
wchar_t2 或 4 个字节1 个宽字符

三、类型转换

在C++中,类型转换(也称为类型强制或类型转换)是将一个数据类型的值转换为另一个数据类型的值的过程。C++支持几种类型的类型转换,包括隐式类型转换(也称为自动类型转换)和显式类型转换(也称为强制类型转换)。

1. 隐式类型转换(Automatic Type Conversion)

隐式类型转换是编译器自动执行的,而无需程序员明确指定。这种转换通常发生在以下情况:

  • 当一个较小的数据类型(如int)被赋值给一个较大的数据类型(如long)时。
  • 当一个整数被赋值给一个浮点类型(如floatdouble)时。
  • 当表达式中涉及到混合类型的操作数时(例如,intdouble相加)。

2. 显式类型转换(Explicit Type Conversion)

显式类型转换需要程序员明确指定。在C++中,有几种显式类型转换的方法:

  1. C风格的类型转换
    使用()来指定要转换的目标类型。例如:
int x = 10;
double y = (double)x; // 将int转换为double
  1. C++风格的类型转换
    C++提供了四种新的类型转换运算符,它们提供了更好的类型安全和可读性。
  • static_cast:用于基本数据类型之间的转换,以及类的向上/向下转型(无危险情况)。
  • dynamic_cast:主要用于类的向上/向下转型,特别是在继承层次结构中。只适用于指向对象的指针或引用。
  • const_cast:用于删除或添加常量性。
  • reinterpret_cast:进行底层的重新解释转换,如指针类型之间的转换。这种转换高度不安全,应谨慎使用。

示例:

int x = 10;
double y = static_cast<double>(x); // 使用static_cast进行转换

3. 示例代码

下面是一个包含各种类型转换的示例代码:

#include <iostream>class Base {};
class Derived : public Base {};int main() {int a = 10;double b = static_cast<double>(a); // 显式类型转换(基本类型)Derived* d = new Derived();Base* b_ptr = d; // 隐式类型转换(向上转型)// Derived* d2 = static_cast<Derived*>(b_ptr); // 显式向上转型是安全的,但这里没有实际必要Derived* d2 = dynamic_cast<Derived*>(b_ptr); // 显式向下转型(需要dynamic_cast)const int c = 20;int* non_const_ptr = const_cast<int*>(&c); // 移除const属性(危险)int* int_ptr = reinterpret_cast<int*>(0x1234); // 底层重新解释转换(高度危险)std::cout << "a as double: " << b << std::endl;std::cout << "d2 points to a Derived object: " << (d2 == d ? "true" : "false") << std::endl;// 注意:不要解引用non_const_ptr或依赖int_ptr,因为它们是不安全的delete d; // 不要忘记释放内存return 0;
}

dynamic_cast在运行时检查转换是否有效,如果转换无效(例如,将指向基类对象的指针向下转型为派生类,而该基类对象实际上并不是派生类的实例),则dynamic_cast会返回空指针(对于指针)或抛出异常(对于引用)。这是dynamic_cast相比static_cast更安全的一个方面。

四、数据类型案例

一些C++数据类型的详细案例代码,涵盖了整型、浮点型、字符型、布尔型、枚举类型、指针类型、引用类型以及用户自定义类型(如结构体和类)。

1. 整型

#include <iostream>int main() {int intVar = 10;short shortVar = 20;long longVar = 3000000000;unsigned int unsignedIntVar = 4294967295U; // 最大的无符号int值(取决于系统)std::cout << "intVar: " << intVar << std::endl;std::cout << "shortVar: " << shortVar << std::endl;std::cout << "longVar: " << longVar << std::endl;std::cout << "unsignedIntVar: " << unsignedIntVar << std::endl;return 0;
}

2. 浮点型

#include <iostream>int main() {float floatVar = 3.14f;double doubleVar = 3.141592653589793238;std::cout << "floatVar: " << floatVar << std::endl;std::cout << "doubleVar: " << doubleVar << std::endl;return 0;
}

3. 字符型

#include <iostream>int main() {char charVar = 'A';char anotherCharVar = 65; // ASCII码值,等同于'A'std::cout << "charVar: " << charVar << std::endl;std::cout << "anotherCharVar: " << anotherCharVar << std::endl;return 0;
}

4. 布尔型

#include <iostream>int main() {bool boolVar = true;if (boolVar) {std::cout << "boolVar is true" << std::endl;} else {std::cout << "boolVar is false" << std::endl;}boolVar = false;std::cout << "boolVar is now " << (boolVar ? "true" : "false") << std::endl;return 0;
}

5. 枚举类型

#include <iostream>enum Color { RED, GREEN, BLUE };int main() {Color myColor = RED;switch (myColor) {case RED:std::cout << "The color is red." << std::endl;break;case GREEN:std::cout << "The color is green." << std::endl;break;case BLUE:std::cout << "The color is blue." << std::endl;break;default:std::cout << "Unknown color." << std::endl;}return 0;
}

6. 指针类型

#include <iostream>int main() {int num = 10;int* ptr = &num; // ptr指向num的内存地址std::cout << "Value of num: " << num << std::endl;std::cout << "Address of num: " << &num << std::endl;std::cout << "Value of ptr (num's address): " << ptr << std::endl;std::cout << "Value pointed by ptr (num's value): " << *ptr << std::endl;return 0;
}

7. 引用类型

#include <iostream>int main() {int num = 10;int& ref = num; // ref是num的引用std::cout << "Value of num: " << num << std::endl;std::cout << "Value of ref (same as num): " << ref << std::endl;ref = 20; // 修改ref也会修改numstd::cout << "After modification, value of num: " << num << std::endl;return 0;
}

五、相关链接

  1. Visual Studio Code下载地址
  2. Sublime Text下载地址
  3. 「C++系列」C++简介、应用领域
  4. 「C++系列」C++ 基本语法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/365328.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Programming from the Ground Up》阅读笔记:p1-p18

《Programming from the Ground Up》学习第1天&#xff0c;p1-18总结&#xff0c;总计18页。 一、技术总结 1.fetch-execute cycle p9, The CPU reads in instructions from memory one at a time and executes them. This is known as the fetch-execute cycle。 2.genera…

九浅一深Jemalloc5.3.0 -- ①浅*编译调试

目前市面上有不少分析Jemalloc老版本的博文&#xff0c;但5.3.0却少之又少。而且5.3.0的架构与之前的版本也有较大不同&#xff0c;本着“与时俱进”、“由浅入深”的宗旨&#xff0c;我将逐步分析Jemalloc5.3.0的实现。5.3.0的特性请见Releases jemalloc/jemalloc GitHub 另…

fastapi+vue3前后端分离开发第一个案例整理

开发思路 1、使用fastapi开发第一个后端接口 2、使用fastapi解决cors跨域的问题。cors跨域是浏览器的问题&#xff0c;只要使用浏览器&#xff0c;不同IP或者不同端口之间通信&#xff0c;就会存在这个问题。前后端分离是两个服务&#xff0c;端口不一样&#xff0c;所以必须要…

Java单体架构项目_云霄外卖-特殊点

项目介绍&#xff1a; 定位&#xff1a; 专门为餐饮企业&#xff08;餐厅、饭店&#xff09;定制的一款软件商品 分为&#xff1a; 管理端&#xff1a;外卖商家使用 用户端&#xff08;微信小程序&#xff09;&#xff1a;点餐用户使用。 功能架构&#xff1a; &#xff08…

ESP32实现UDP连接——micropython版本

代码&#xff1a; import network import socket import timedef wifiInit(name, port):ap network.WLAN(network.AP_IF) # 创建一个热点ap.config(essidname, authmodenetwork.AUTH_OPEN) # 无需密码ap.active(True) # 激活热点ip ap.ifconfig()[0] # 获取ip地址print(…

【想起就补】整理了一些SSH中常用的命令

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、常用命令类型2.1 远程登录相关2.2 文件操作命令2.3 权限和所有权操作命令2.4 文…

MT6989(天玑9300)芯片性能参数_MTK联发科5G处理器

MT6989是联发科Dimensity旗舰系列的成员&#xff0c;旨在为旗舰5G智能手机供应商提供最先进的技术和性能。MT6989也是联发科目前最具创新和强大的5G智能手机芯片&#xff0c;具有领先的功耗效率&#xff0c;无与伦比的计算架构&#xff0c;有史以来最快和最稳定的5G调制解调器&…

【操作系统期末速成】 EP04 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️2.1 考点七&#xff1a;进程通信2.2 考点八&#xff1a;线程的概念2.3 考点九&#xff1a;处理机调度的概念及原则2.4 考点十&#xff1a;调度方式与调度算法 一、前言&#x1f680;…

邀请函 | 极限科技全新搜索引擎 INFINI Pizza 亮相 2024 可信数据库发展大会!

过去一年&#xff0c;在全球 AI 浪潮和国家数据局成立的推动下&#xff0c;数据库产业变革不断、热闹非凡。2024 年&#xff0c;站在中国数字经济产业升级和数据要素市场化建设的时代交汇点上&#xff0c;“2024 可信数据库发展大会” 将于 2024 年 7 月 16-17 日在北京悠唐皇冠…

docker仓库--centos7.9部署harbor详细过程与使用以及常见问题

文章目录 前言1.docker-compose是什么2.harbor是什么 centos7部署harbor详细过程与使用环境一、部署docker二、部署harbor1.下载docker-compose工具2.harbor安装3.拷贝样本文件&#xff0c;并修改文件4.安装harbor&#xff0c;安装完成自行启动5.查看 三、harbor的使用1.创建项…

2024第17届中国西部体育博览会

2024第17届中国西部体育博览会 主办单位&#xff1a; 中国西部教体医融合博览会组委会 承办单位&#xff1a;重庆中博展览有限公司 展会背景&#xff1a; 四川和重庆是教育大省&#xff0c;体育大省。成渝双城经济圈的出台&#xff0c;构建以国内大循环为主体、国内国际双循环…

探索人工智能和LLM对未来就业的影响

近年来&#xff0c;人工智能&#xff08;AI&#xff09;迅猛发展&#xff0c;引发了人们的兴奋&#xff0c;同时也引发了人们对就业未来的担忧。大型语言模型&#xff08;LLM&#xff09;就是最新的例子。这些强大的人工智能子集经过大量文本数据的训练&#xff0c;以理解和生成…

VMamba: Visual State Space Model论文笔记

文章目录 VMamba: Visual State Space Model摘要引言相关工作Preliminaries方法网络结构2D-Selective-Scan for Vision Data(SS2D) VMamba: Visual State Space Model 论文地址: https://arxiv.org/abs/2401.10166 代码地址: https://github.com/MzeroMiko/VMamba 摘要 卷积神…

Chrome浏览器web调试(js调试、css调试、篡改前置)

目录 1. 打开开发者工具(Dev Tool) 2. 打开命令菜单 截图 3. 面板介绍 4. CSS调试 右键检查快速到达元素处 查找DOM数 利用面板Console查找DOM节点 内置函数查找上一个选择点击的元素 5. 调试JS代码(Javascript调试) 日志调试 选择查看日志等级 眼睛观测变量 …

Vue3学习笔记<->创建第一个vue项目(2)

新建一个项目目录 找一个盘新建一个目录&#xff0c;我这里在D盘创建一个vuedemo目录作为项目存放的目录。使用idea打开目录。   单击ieda底部的按钮“Terminal”&#xff0c;打开命令行窗口&#xff0c;如果命令行窗口当前目录不是“vuedemo”&#xff0c;就切换到“vuedem…

论文阅读:Simple and Efficient Heterogeneous Graph Neural Network

Yang, Xiaocheng, Mingyu Yan, Shirui Pan, Xiaochun Ye and Dongrui Fan. “Simple and Efficient Heterogeneous Graph Neural Network.” AAAI Conference on Artificial Intelligence (2022). 论文地址&#xff1a;[PDF] Simple and Efficient Heterogeneous Graph Neural…

深度学习11-20

1.神经元的个数对结果的影响&#xff1a; &#xff08;http://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html&#xff09; &#xff08;1&#xff09;神经元3个的时候 &#xff08;2&#xff09;神经元是10个的时候 神经元个数越多&#xff0c;可能会产生…

uniapp运行到小程序Vue.use注册全局组件不起作用

真想吐槽一下小程序&#xff0c;uniapp运行到小程序使用Vue.use注册全局组件根本不起作用&#xff0c;也不报错&#xff0c;这只是其中一个问题&#xff0c;其他还有很多问题&#xff0c;比如vue中正常使用的没问题的语法&#xff0c;运行到小程序就不行&#xff0c;又是包太大…

uniapp,uni-fab组件拖动属性,替代方案

文章目录 1. 背景2. 替代方案2.1 方案一2.2 方案二 参考 1. 背景 最近基于uniapp开发一款设备参数调试的APP软件&#xff0c;其中有使用到悬浮按钮&#xff0c;快速开发阶段&#xff0c;为了能尽快上线&#xff0c;直接使用了uni-ui的扩展组件uni-fab&#xff0c;参考【1】&am…

小程序消息定时任务(定时触发器)发送总结

文章目录 小程序消息定时任务&#xff08;定时触发器&#xff09;发送总结1.开发思路2.实现办法3.查看定时触发器是否正常运作4.总结 小程序消息定时任务&#xff08;定时触发器&#xff09;发送总结 1.开发思路 在使用小程序的时候总是会遇到消息任务发送的情况&#xff0c;…