C++基础系列【4】C++数据类型

数据类型是构建程序的基础,它决定了变量在内存中存储的方式和大小,以及可以进行的操作。

C++提供了很多内置数据类型,使开发者可以高效地处理和操作各种数据。

基本数据类型

C++提供了多种基本的内置数据类型,每种类型都有特定的关键字和用途:

  1. 布尔型 (bool)
    1. 用途:表示真或假的状态。
    2. 内存占用:1个字节。
    3. 取值范围:true 或 false。
  2. 字符型 (char)
    1. 用途:存储单个字符,如字母或数字。
    2. 内存占用:1个字节。
    3. 取值范围
      • char:-128 到 127(signed char)(-2^7 到 2^7 - 1)
      • unsigned char:0 到 255(0 到 2^8 - 1)
  3. 整型 (int)
    1. 用途:存储整数。
    2. 内存占用:4个字节(在大多数现代系统上)。
    3. 取值范围
      • int:-2,147,483,648 到 2,147,483,647(signed int)(-2^31 到 2^31 - 1)
      • unsigned int:0 到 4,294,967,295(0 到 2^32 - 1)
  4. 浮点型 (float)
    1. 用途:存储单精度浮点数。
    2. 内存占用:4个字节。
    3. 取值范围:约 ±3.4 × 10^38,有效数字约7位。
  5. 双浮点型 (double)
    1. 用途:存储双精度浮点数。
    2. 内存占用:8个字节。
    3. 取值范围:约 ±1.7 × 10^308,有效数字约15位。
  6. 长整型 (long)
    1. 用途:存储较大的整数。
    2. 内存占用:在32位系统上通常为4个字节,在64位系统上通常为8个字节。
    3. 取值范围
      • long:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(signed long)(-2^63 到 2^63 - 1)
      • unsigned long:0 到 18,446,744,073,709,551,615(0 到 2^64 - 1)

类型修饰符

可以使用类型修饰符来改变基本数据类型的属性:

  • signed:表示有符号类型,可以存储正数、负数和零。默认情况下,intshortlong都是有符号的。
  • unsigned:表示无符号类型,只能存储非负整数。
  • short:表示短整型,通常占用2个字节。
  • long:表示长整型,占用字节数依系统而定(通常为4或8个字节)。
  • long long:表示更长的整型,占用8个字节,比long更明确地表明这是一个更大的整数类型。

类型转换

类型转换是将一个数据类型的值转换为另一种数据类型的值的过程。C++中提供了四种类型转换方式:

  1. static_cast
    1. 用途:在相关类型之间进行转换,如从intfloat
    2. 示例
  int i = 10;
  float f = static_cast<float>(i);
  1. dynamic_cast
    1. 用途:用于将基类指针或引用安全地转换为派生类指针或引用。
    2. 示例
class Base {};
class Derived : public Base {};
Base* ptr_base = new Derived();
Derived* ptr_derived = dynamic_cast<Derived*>(ptr_base);
  1. const_cast
    1. 用途:去除const限定符。
    2. 示例
const int i = 10;
int r = const_cast<int>(i);
  1. reinterpret_cast
    1. 用途:在几乎任意类型之间进行转换,不进行任何类型检查。
    2. 示例
int i = 10;
float f = reinterpret_cast<float&>(i);

typedef与using

typedefusing都可以用来为类型定义别名,但它们有一些区别:

  • typedef
    • 用法typedef 原有类型 新类型名;
    • 示例
typedef unsigned int uint;
uint a = 10;
  • 限制:作用有限,不支持模板类型别名。
  • using
    • 用法using 新类型名 = 原有类型;
    • 示例
using uint = unsigned int;
uint a = 10;
  • 优势:作用更广,支持模板类型别名。

建议C++中更多的使用using,一般都是C语言才使用typedef

enum

C语言的教程中咱详细介绍过,枚举类型是一种用户定义的数据类型,它由一组命名的整数常量组成。枚举类型的变量只能取这些常量中的值。

  • 定义
enum Color { RED, GREEN, BLUE };
Color c = RED;
  • 赋值:默认情况下,第一个枚举常量的值为0,后续常量值依次递增1。也可以显式赋值。
enum Color { RED = 1, GREEN, BLUE };
  • 类型转换:枚举类型的值可以隐式转换为整数,但不能隐式转换为其他类型。

高级类型

  • size_t:表示对象的大小或数组元素的个数,是一种无符号整型。大小与平台相关,但足以存储任何对象的大小。
  • wchar_t:宽字符类型,Windows下比较常用,用于支持多字节字符集(如Unicode)。
  • 位域 (bit-field):允许在结构体中定义占用特定位数的成员,用于节省内存。

综合示例代码

详见:https://godbolt.org/z/fxY711s57

#include <iostream>
#include <limits>
using namespace std;

enum Color { RED, GREEN, BLUE };
typedef unsigned int uint;

int main() {
    bool flag = true;
    char ch = 'A';
    signed char sch = -10;
    unsigned char uch = 200;
    int i = -1000;
    unsigned int ui = 1000;
    long l = 123456789L;
    unsigned long ul = 1234567890UL;
    long long ll = 9223372036854775807LL;
    unsigned long long ull = 18446744073709551615ULL;
    float f = 3.14f;
    double d = 3.141592653589793;
    long double ld = 3.14159265358979323846L;
    wchar_t wc = L'你';
    size_t size = sizeof(int);

    cout << "Flag: " << flag << endl;
    cout << "Char: " << ch << ", Signed Char: " << sch << ", Unsigned Char: " << uch << endl;
    cout << "Int: " << i << ", Unsigned Int: " << ui << endl;
    cout << "Long: " << l << ", Unsigned Long: " << ul << endl;
    cout << "Long Long: " << ll << ", Unsigned Long Long: " << ull << endl;
    cout << "Float: " << f << ", Double: " << d << ", Long Double: " << ld << endl;
    wcout << "Wide Char: " << wc << endl;
    cout << "Size of int: " << size << " bytes" << endl;

    Color color = RED;
    switch (color) {
        case RED:
            cout << "Color is Red" << endl;
            break;
        case GREEN:
            cout << "Color is Green" << endl;
            break;
        case BLUE:
            cout << "Color is Blue" << endl;
            break;
    }

    uint myUint = 123;
    cout << "Using uint: " << myUint << endl;

    return 0;
}

作者介绍

  • 程序喵大人
  • 35- 资深C/C++/Rust/Android/iOS客户端开发
  • 10年大厂工作经验
  • 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
  • 《C++20高级编程》《C++23高级编程》等多本书籍著译者

C++训练营

专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得offer!训练营介绍

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

app专项测试(网络测试流程)

一、网络测试的一般流程 step1&#xff1a;首先要考虑网络正常的情况 ① 各个模块的功能正常可用 ② 页面元素/数据显示正常 step2&#xff1a;其次要考虑无网络的情况 ① APP各个功能在无网络情况下是否可用 ② APP各个页面之间切换是否正常 ③ 发送网络请求时是…

【Kubernetes Pod间通信-第3篇】Kubernetes中Pod与ClusterIP服务之间的通信

引言 我们之前了解了在不同场景下,Kubernetes中Pod之间的通信是如何路由的。 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信现在,我们来看看在集群中,Pod与服务之间的通信是如何…

【免费】2007-2019年各省科技支出占一般公共预算支出的比重数据

2007-2019年各省科技支出占一般公共预算支出的比重数据 1、时间&#xff1a;2007-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、科技支出占一般公共预算支出的比重 4、范围&#xff1a;31省 5、指标解释&#xff1a…

【LeetCode】day15 142.环形链表II

142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则…

C基础(六)指针,指针的基础概念、变量定义、运算、大小等

指针&#xff1a; 什么是指针&#xff1a;指针表示内存地址&#xff0c;平时所说的指针一般是保存地址的指针变量。定义指针变量 格式&#xff1a;数据类型 *指针变量名。初始化和赋值&#xff1a;指针指向变量的首地址。定义指针后若未赋值则为野指针&#xff1b;可将变量地址…

【R语言】获取数据

R语言自带2种数据存储格式&#xff1a;*.RData和*.rds。 这两者的区别是&#xff1a;前者既可以存储数据&#xff0c;也可以存储当前工作空间中的所有变量&#xff0c;属于非标准化存储&#xff1b;后者仅用于存储单个R对象&#xff0c;且存储时可以创建标准化档案&#xff0c…

央行发布《贸易金融分布式账本技术要求》,参考架构包括5部分

《银行科技研究社》(作者 木子剑):2024年12月11日,中国人民银行发布金融行业标准《贸易金融分布式账本技术要求》(JR/T 0308-2024)(以下简称“《要求》”),当日实施。据悉,该文件的起草单位包括6大行和多家股份制银行等。 《要求》规定了分布式账本技术在贸易金融领域…

CSS盒模型详解:从零开始理解margin、border、padding

引言 在CSS中&#xff0c;盒模型(Box Model)是一个非常基础且重要的概念。它定义了网页中每个元素如何占据空间以及元素间的关系。今天&#xff0c;我们就通过简单的例子来理解盒模型的构成。 盒模型的组成部分 CSS盒模型主要由四个部分组成&#xff08;从外到内&#xff09…

DS图(中)(19)

文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下&#xff0c;我们来学习下图的中篇&#xff01;&#xff01;&#xff01; 一、图的遍历 图的遍历指的是遍历图中的顶点&#xff0c;主要有 广度优先遍历 …

112,【4】攻防世界 web weak_auth

之前做过&#xff0c;回顾 进入靶场 输入admin 123456 不是&#xff0c;这也行&#xff0c;什么闭合方式&#xff0c;注释符都没用上 反而不自然了 不过输入admin 123456 纯属个人习惯 假如我没那么输&#xff0c;或者用户名&#xff0c;密码不是这两个&#xff0c;我该怎…

蓝桥杯更小的数(区间DP)

题目描述 小蓝有一个长度均为 n 且仅由数字字符 0 ∼ 9 组成的字符串&#xff0c;下标从 0 到 n − 1&#xff0c;你可以将其视作是一个具有 n 位的十进制数字 num&#xff0c;小蓝可以从 num 中选出一段连续的子串并将子串进行反转&#xff0c;最多反转一次。小蓝想要将选出的…

109,【1】攻防世界 web 题目名称-文件包含

进入靶场 直接显示源代码 提示我们通过get方式传递名为filename的参数&#xff0c;同时给出了文件名check.php filenamecheck.php 显示使用了正确的用法&#xff0c;错误的方法 filename./check.php 还是一样的回显 傻了&#xff0c;题目名称是文件包含&#xff0c;需要用到…

71.StackPanel黑白棋盘 WPF例子 C#例子

就是生成黑白棋盘&#xff0c;利用该控件能自动排列的功能。用一个横向的StackPanel嵌套纵向的StackPanel&#xff0c;然后在里面添加设定好长和高的矩形。 因为StackPanel是按照控件的大小展示的。所以如果不设置长和宽。就会显示不出矩形。 <StackPanel Orientation"…

DeepSeek之python实现API应用

先创建一个API KEY https://platform.deepseek.com/api_keys python脚本实现 # Please install OpenAI SDK first: `pip3 install openai`from openai import OpenAIclient = OpenAI(api_key="", base_url="https://api.deepseek.com")response = cli…

MySQL中like模糊查询如何优化?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL中like模糊查询如何优化&#xff1f;】面试题。希望对大家有帮助&#xff1b; MySQL中like模糊查询如何优化&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中&#xff0c;LIKE模糊查询通常会影…

通过docker安装部署deepseek以及python实现

前提条件 Docker 安装:确保你的系统已经安装并正确配置了 Docker。可以通过运行 docker --version 来验证 Docker 是否安装成功。 网络环境:保证设备有稳定的网络连接,以便拉取 Docker 镜像和模型文件。 步骤一:拉取 Ollama Docker 镜像 Ollama 可以帮助我们更方便地管理…

制作PE启动盘(内含Win11 iso镜像)

前言 本文用于记录制作PE启动盘过程&#xff0c;学习记录用&#xff0c;如有不对请指出&#xff0c;谢谢&#xff01; 参考视频&#xff1a; 1. 微PE下载&#xff1a;https://www.bilibili.com/video/BV1vT4y1n7JX/?spm_id_from333.788.top_right_bar_window_history.conte…

128陷阱

首先我们了解一下关于包装器类型 java是面向对象的语言&#xff0c;但基本类型并不是面向对象的&#xff0c;从而出现了包装器类型&#xff0c;并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型&#xff0c;它相当于将…

javaEE-9.HTML入门

目录 一.什么是html 二.认识html标签 1.标签的特点: 2.html文件基本结构 3.标签的层次结构 三、html工具 四、创建第一个文件 五.html常见标签 1标题标签h1-h6 2.段落标签:p 3.换行标签:br 4.图片标签:img 图片路径有1三种表示形式: 5.超链接:a 链接的几种形式: …

开源 GPU 集群管理器 GPUStack

GPUStack 是一个用于运行 AI 模型的开源 GPU 集群管理器。 项目地址&#xff1a;gpustack/gpustack: Manage GPU clusters for running AI modelshttps://github.com/gpustack/gpustackhttps://github.com/gpustack/gpustackhttps://github.com/gpustack/gpustack 核心特性 广…