C++之数据类型

2023-11-19

数据类型可以分为  基本数据类型  和  非基本数据类型

1.基本数据类型

     整型 (int),布尔值类型(bool),浮点数类型(double),字符类型(char), void类型。

2.非基本数据类型

     指针类型(type*),数组类型(type[]),引用类型(double&),数据结构(struct),类(class),枚举类型(enum)。

数据 可分为 常量 和 变量

1.1整数类型

    整数类型可以分为:

    short:占2个字节(32位,64位),分为short,unsigned short(无符号) ,signed short(有符号)。无符号可以只能表示非负整数,有符号即可以表示负整数也可以表示非负整数。无符号整数表示的正整数范围是有符号整数的2倍(整数类型都是这样)。不加修饰的short通常是表示有符号的。

    int :4字节(32位,64位),分为int,unsigned int(无符号) ,signed int(有符号)。不加修饰的int通常是表示有符号的。

    long  :4字节(32位),8字节(64字节),分为long  ,unsigned long  (无符号) ,signed long  (有符号)。不加修饰的long  通常是表示有符号的。

    long long:8字节(32位,64位),分为long long,unsigned long long(无符号) ,signed long long(有符号)。不加修饰的long long通常是表示有符号的。

  整数字面值常量:

     整数字面值常量分为:十进制,八进制,十六进制。

     以x或X(0x或0X)开头的字面值常量表示一个十六进制数值(基是16);以0开头但是后面没有x或X的字面值常量表示一个八进制数值(基是8);以0b开头的字面值常量便是一个二进制(基是2)

后缀U或u用于显式指定unsigned字面值常量,后缀L或l用于显式指定long字面值常量 ,后缀LL或ll用于显式指定long long字面值常量。比如

3是int  类型

3L是long int类型

3ULL是unsigned long long类型

1.2布尔值

     一个布尔变量(bool)的取值或者是true或者是false,布尔变量常用于表示逻辑运算的结果。

     字节大小(32位,64位):1字节,也就是8bit。

     取值范围:true,false。

     布尔值转换成整数时:true转为1,false转为0。

      整数转换成布尔值时:非0整数值对应true,0对应false。

      比如  

  int i = true;  //此时i被赋值为1    

  bool b1 = 7; //因为7不是0,所以 b被赋值为true

       在算术逻辑表达式和位逻辑表达式中,bool被自动转换成int进行运算,如果最终的计算结果需要转换成bool类型,那么就是非0为true,0为false。

比如

bool a = true;

bool b = false;

bool x = a  + b; //a+b的结果是2,因此x的最终取值是true

bool y = a - b;  //a-b的结果是0,因此x的最终取值是false

bool z = a||b;  //a||b的结果是1,因此x的最终取值是true   

       指针也能被隐式转换成bool。其中非空指针对应true,值为nullptr的指针对应false。

1.3浮点数据类型

    浮点数据类型分为 float(单精度),double(双精度),long double(扩展精度)。

    float:4字节(32位,64位)

    double:8字节(32位,64位)

    long double:8字节

浮点数字面值常量:

    默认情况下,浮点数字面值常量时double类型。

    浮点数字面值常量内部不允许出现空格,例如65.43 e-21不是一个浮点数字面值常量。

    定义一个float类型的浮点数字面值常量,则后缀加上f或者F:3.14159265f ,2.0f ,2.9e-3f

    定义一个long double类型的浮点数字面值常量,则后缀加上l或者L:3.14159265f L,2.0fL,2.9e-3L

1.4字符类型

     常用的字符集(比如不同自然语言的字符集:英文,中文,阿拉伯语...)和  字符编码方式(utf-8,gbk,gb2312....)有很多。为了反映和描述这种多样性,c++提供了一系列字符类型:

   char:默认的字符类型,用于程序文本。char是c++实现所用的字符集,占1字节(32位和64位),取值范围 -128~127。

   signed char(有符号):与char类似   带符号,既可以存放正值,也可以存放负值,取值范围:-127~127。

   unsigned char(无符号):与char类似  但是不带符号  取值范围:0~255。

   wchar_t(宽字符):用于存放Unicode等更大的字符集。unicode编码的字符一般以wchar_t类型存储。wchar_t数据类型一般为16位或32位,所能表示的字符数远超char型。(char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。),比如对于汉字,韩文以及日文这样的字符,它们的每一个文字都占据两个字节。

    char16_t:该类型存放UTF-16等16位字符集。

    char32_t:该类型存放UTF-32等32位字符集。

一个char类型变量存放一个字符 ,字符的种类由实现版本所用的字符集决定。  

     比如

      char ch = 'a';

字符类型执行算术运算和位逻辑运算

      字符类型属于整型。因此,我们可以在字符类型上执行算术运算和位逻辑运算。

void digits()
{
    for(int i = 0; i!= 10;i++)
     {
        cout<<static_cast<char>('0'+i);//'0先转换成int类型和i进行运算,然后通过 
                                        //static_cast<char>' 将int类型转换成char
     }
}

字符字面值常量

    字符字面值常量:单引号内的一个字符,比如‘a’,'0'等。

    字符字面值常量的数据类型是char,它可以隐式地转换成当前机器所用的字符集中对应的整数值。例如,如果你的机器使用的是ASCII字符集,则‘0’的值是48。

    转义字符也是单字符,比如‘\n’,‘\t’,‘\d’等。

     我们可以把字符集中的字符表示成一个1-3位的八进制(\后面紧跟八进制数字)或者表示成16进制数(\x后紧跟十六进制数字)。其中,序列里十六进制数字的数量没有限制。如果遇到了第一个不是八进制数字或者十六进制数字的字符,则表明当前的八进制序列或者十六进制序列已经结束。

 

    上述规则使得我们不但可以设法表示出字符集中的每一个字符,而且能把这些字符嵌入到一个长字符串中。

    当我们在字符串中嵌入八进制数字常量时,常规的做法是使用3个数字,对于十六进制数字常量来说,我们使用两个数字。比如

char v1[] = "a\xah\129"; \\6个字符:‘a’ '\xa' 'h' '\12' '9' '\0'

char v2[] = "a\xah\127"; \\5个字符:‘a’ '\xa' 'h' '\127' '\0'

char v3[] =  "a\xad\127";\\4个字符:‘a’ '\xad' 'h' '\127' '\0'

char v4[] =  "a\xad\0127";\\4个字符:‘a’ '\xad' '\012' '7' '\0'

 标准C中的wprintf()函数以及标准C++的iostream类库中的类和对象能提供wchar_t宽字符类型的相关操作。

#include <iostream>
#include <locale>           //setlocale函数在locale头文件中定义
using namespace std;
int main()
{
	//使用setlocale函数将本机的语言设置为中文简体
	//LC_ALL表示设置所有的选项(包括金融货币、小数点,时间日期格式、语言字符串的使用习惯等),chs表示中文简体
	setlocale(LC_ALL, "chs");
	wchar_t wt[] = L"中国伟大复兴梦";   //大写字母L告诉编译器为"中"字分配两个字节的空间
	wcout << wt << endl;               //使用wcout来代替cout输出宽字符
	return 0;
}

如何定义常量

1.使用#define宏定义(define是一个记号,表示后面的数字,在编译时编译器会把记号简单地替换成数字)

    #define LENGTH 10

    #define  WIDTH  5

2.使用const常量关键字(const是声明了一个不可改变的变量并给其赋值)

const int LENGTH = 10;

const int WIDTH =  5;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++之数据类型 的相关文章

随机推荐

  • PowerShell基础教程(5)——如何自定义 Windows PowerShell

    PowerShell基础教程 5 如何自定义 Windows PowerShell
  • RK3568 IDB烧录失败解决方法

    1 简介 公司有个RK3568的项目使用了三星的8GB eMMC5 1 KLM8G1GETF B041 但在硬件回板的时候 发现个别单板程序烧不进去 会报下载IDB失败 部分串口打印日志如下 DDR Version V1 09 202106
  • 【Grafana】CentOS下安装Grafana

    Grafana CentOS下安装Grafana 本文主要是在CentOS下对Grafana的安装和配置等进行介绍 以及一些踩过的坑 文章目录 Grafana CentOS下安装Grafana 一 基本介绍 二 安装方法 1 从YUM存储库
  • Android SQLite数据库升级

    Android操作SQLite数据库要实现SQLiteOpenHelper类 SQLiteOpenHelper的实现类要重写两个方法onCreate和onUpgrade onUpgrade方法就是用于SQLite数据库升级 问题一 数据库升
  • 2022年2月份谷哥学术资源分享下载列表 20/20

    资源名称 下载地址 关键词 项目反应理论与经典测验理论之比较 pdf https download csdn net download tysonchiu 79246540 技术文档 响应面方法在优化微生物培养基中的应用 pdf https
  • unity 如何切换输入系统(Input System)

    问题描述 在 Unity2019 版本中 加入了新的 Input System Package 当导入包的时候可能会将旧的输入系统禁用 这时如果再打开使用旧的输入系统的项目可能会出现异常 InvalidOperationException
  • jvm 远程调试配置

    jstatd方式 创建配置文件 随便找个目录就可以 cat gt jstatd policy grant codebase file java home lib tools jar permission java security AllP
  • xcodebuild 命令打包

    xcodebuild命令行打包 在使用xcodebuild编译后发现有些东西有些临时性质的东西 依然存在 搜索了一些资料 找到有clean的命令 在之前打包都是生成app文件 将app打包成ipa文件需要编写一个脚本 操作起来相对麻烦 原来
  • 1.20 实现百度搜索

    1 axios不支持jsonp import React Component from react import ReactDOM from react dom https github com webmodules jsonp包 impo
  • 软件测试基础知识

    常用的软件测试方法有两大类 静态测试方法和动态测试方法 其中软件的静态测试不要求在计算机上实际执行所测程序 主要以一些人工的模拟技术对软件进行分析和测试 而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序 而达
  • 中国智慧能源行业行情监测及未来动向规划预测报告2022-2028年

    中国智慧能源行业行情监测及未来动向规划预测报告2022 2028年 报告目录 第一章 智慧能源的基本概述 第二章 2021 2021年全球智慧能源产业发展分析 2 1 2021 2021年全球智慧能源产业发展综况 2 1 1 全球智慧能源网
  • Electron 使用打印机

    1 问题 开发时使用打印机打印小票 2 开发环境 electron12 vue2 node14 electron 12 2 3 vue 2 6 12 node 14 21 3 3 问题解决 使用原生自带的 webview print 1 s
  • 新安装的ubuntu,遇到的问题记录

    镜像版本 https mirror nju edu cn ubuntu releases 22 04 ubuntu 22 04 1 live server amd64 iso 安装后无法切换 root 用户 问题截图 null 解决办法 解
  • glslViewer编译

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 glslViewer下载 二 编译步骤 1 使用CMake 前言 一 glslViewer下载 glslViewer下载地址 二 编译步骤 1 使用CMake 2 配置
  • android常用框架!万字长文轻松彻底入门Flutter,使用指南

    前言 说不焦虑其实是假的 因为无论是现在还是最近几年 很早就有人察觉Android开发的野蛮生长时代已经过去 过去的优势是市场需要 这个技术少有人有 所以在抢占市场的时候 基本上满足需要就已经可以了 但是现在 各式各样的APP层出不穷 AP
  • python类

    python是一种面向对象的变成语言 python几乎所有的东西都是对象 包括对象和属性 一 类的定义 python类的定义 class ClassName pass 实例 注意 类中的函数称为方法 有关于函数的一切适用于方法 唯一的区别在
  • MySQL出现“Lost connection to MySQL server during query”问题分析与解决

    问题重现 有一个表总是在写入数据的时候报2013的错误 原因分析 官方文档 总结一下3种可能性 一般都是第一或第二种原因 首先SQLAlchemy官方对该错误的解释 针对与数据库操作相关的错误而引发的异常 并且不一定在程序员的控制之下 例如
  • BUUCTF [CSAWQual 2019]Web_Unagi 1

    BUUCTF CSAWQual 2019 Web Unagi 1 提示在 flag 有提示了上传xml文件及其格式 直接用之前xml注入的上传即可 改文件名为1 xml上传即可得flag gt
  • 关于如何解决:Maven无法从aliyun仓库自动下载jar包(情况之一)

    如果你出现修改Maven配置文件settings xml无法生效 或者无法从aliyun仓库自动下载jar包的情况 除了其他博主提出的情况与解决方案以外 你如果还没有解决 检查是否遇到以下情况 最首先应当去aliyun官网 https de
  • C++之数据类型

    数据类型可以分为 基本数据类型 和 非基本数据类型 1 基本数据类型 整型 int 布尔值类型 bool 浮点数类型 double 字符类型 char void类型 2 非基本数据类型 指针类型 type 数组类型 type 引用类型 do