2、数据类型

【高精浮点】关于long double的使用方法 听说今天桂林CCPC计算几何卡了double,就来学一下更高精的浮点long double。 文章链接: long double 使用方法 long double精度数据的使用 总结: 性质: double 占8字节,long double 占12字节,内存差的不算多。 double 只能精确到小数点后 15位,long double 能精确到18位左右。 写代码注意事项: 宏定义:在程序开头宏定义#define double long double 输入: scanf. 阅读详情

 文章目录

前言

一.整型

 1.short(短整型)

 2.int(整型)

 3.long(长整型)

 4.long long(长长整型)

二.实型(浮点型)

1.单精度float

2.双精度double

3.扩展精度long double

三.什么是无符号型和带符号型 

四.字符型

五.转义字符

六.字符串型

七.布尔类型

八.sizeof关键字

九.类型转换

十.数据的输入


前言

本文所有内容都是以我的角度和理解去讲解c++,若有什么错误或不对的地方,欢迎指正。

若没有c++基础的,并且想要学习c++的人建议先去b站上看黑马程序员有关于c++的教程视频 https://b23.tv/Bgh4Bw0,该教程视频是免费的;若有一定c++基础的便可直接阅读本文章。

本文所有内容与我所推荐的视频的讲解顺序大致相同,因此本作者建议和该视频配套使用,这样效果更佳 

本文所有内容主要是帮助大家以我的角度再去理解一遍c++,用以更好的掌握c++。

后续会不断更新。


       c++在创建一个变量或常量时,必须要指定出相应的数据类型,而不同的类型所占用的内存空间是不同的。编译器给变量或常量分配内存空间是需要时间的,如果选取类型的内存空间越大,那么分配内存空间花费的时间也就越多,这会直接导致程序的性能变差。因此在创建一个变量或常量时,我们必须选取合适的数据类型。

一.整型

含义: 整型变量用于表示是整数类型的数据。

 1.short(短整型)

占用空间:2字节

取值范围:-2^15~2^15-1(-32768~32767)

#include<iostream>
using namespace std;

int main() {

	short a = 1;

	return 0;
}

 2.int(整型)

占用空间:4字节

取值范围:-2^31~2^31-1(-2147483648~2147483647)

#include<iostream>
using namespace std;

int main() {

	int a = 2;

	return 0;
}

 3.long(长整型)

占用空间:在Windows中为4字节;在Linux中,环境为32位,则为4字节,环境为64位,则为8字节。

取值范围:-2^31~2^31-1(-2147483648~2147483647)注:该取值范围为4字节下的。在不同的环境中大小可能会不同。

#include<iostream>
using namespace std;

int main() {

	long a = 3;

	return 0;
}

 4.long long(长长整型)

占用空间:8字节

取值范围:-2^63~2^63-1(-9223372036854775808~9223372036854775807)

#include<iostream>
using namespace std;

int main() {

	long long a = 4;

	return 0;
}

二.实型(浮点型)

含义:  浮点型变量表示的是小数类型的数据。

1.单精度float

占用空间:4字节

有效数字范围:6~7位有效数字

#include<iostream>
using namespace std;

int main() {

	float a = 3.14f;

	return 0;
}

2.双精度double

占用空间:8字节

有效数字范围:15~16位有效数字

#include<iostream>
using namespace std;

int main() {

	double a = 3.1415926;

	return 0;
}

3.扩展精度long double

占用空间:具体大小取决于编译器和平台

有效数字范围:18~19位有效数字

#include<iostream>
using namespace std;

int main() {

	long double a = 3.1415926;

	return 0;
}

三.什么是无符号型和带符号型 

整型浮点型都可以划分为无符号型带符号型

用法:

  • 带符号型:数据类型(如果不刻意去强调该类型是无符号型,那么默认该数据类型为带符号型)
  • 无符号型:unsigned 数据类型
#include<iostream>
using namespace std;
int main() {
	
	//在我们日常编程中,如果不刻意去强调该类型是无符号型,那么默认该数据类型为带符号型。
	int num1 = 0;//带符号型
	unsigned int num2 = 1;//无符号型

	return 0;
}

区别:带符号类型可以表示正数、负数和0;无符号类型只能表示大于等于0的数。

所表示的范围区别:为了方便理解。我们假设带符号类型的范围为[-1,1],那么无符号类型的范围就为[0,2]。带符号类型和无符号类型各自表示的区间长度是一样的,只不过是将带符号类型原本用来表示负数的部分改成了用来表示正数。

例如 int 和 unsigned int 的表示范围:

  • int:(-2147483648~2147483647)
  • unsigned int:(0~4294967295)// 4294967295=2147483648+2147483647

在我们选择数据类型时,最好以下规则来规范自己:

  • 定义整型时,尽可能的使用int类型。在实际应用中,short 类型常常显得太小,而 long 类型一般和 int 类型有一样的范围。如果所要表示的数据超过了 int 类型的表示范围,就选用 long long 类型。
  • 定义浮点型时,就选用 double, 这是因为 float 通常精度不够而且双精度浮点数( double )和单精度浮点数( float )的性能代价相差无几。事实上,在某些情况下,双精度运算速度甚至比单精度还快。long double 提供的精度在一般情况下是没有必要的,况且它运行时,带来的性能消耗也不容忽视。但是 long double 可能会在某些要求高精度的算法题中被使用。

四.字符型

含义:  字符型变量表示的是单个字符。

语法:char ch = 'a'

#include<iostream>
using namespace std;

int main() {

	char ch = 'a';

	return 0;
}

 注意事项:

  • 在给字符型变量赋值时,要用单引号将字符括起来,而不能使用双引号将字符括起来。
  • 单引号内只能有一个字符,不可以是字符串(即多个字符,底下有介绍什么是字符串)。
  • c和c++中字符型变量只占用1个字节。
  • 字符型变量并不是把字符本身放到内存中存储,而是将字符对应的ASCII编码放入到储存单元(简单来说字符型变量的本质是以数字的形式保存在计算机中的)。

五.转义字符

最常用的转义字符有:\n、\\、\t、\'、\"。 

转义字符含义ASCII码值
\a警报007
\b退格(BS),将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF),将当前位置移到下一行开头010
\r回车(CR),将当前位置移到本行开头013
\t水平制表(HT)009
\v垂直制表(VT)011
\\代表一个反斜杠字符"\"092
\'代表一个单引号字符039
\"代表一个双引号字符034
\?代表一个问号字符063
\0数字0000
\ddd8进制转义字符3位8进制
\xhh16进制转义字符2位16进制

注:c++中的endl就代表着\n换行;由于在页面上不能生动形象的展示常用转义字符的用途,因此希望没有理解的同学通过该链接12 数据类型-转义字符_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1et411b73Z/?p=12&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=fb971a39c85c78bac3fa589750a88aa9进行学习。

六.字符串型

含义:  字符串型变量表示的是一串字符。

在c++中字符串有两种风格

1、c风格字符串:char 变量名[] = "字符串值"

#include<iostream>
using namespace std;
int main() {
	
	char arr[] = "abc";
	//如果想要输出一个字符串,只需要使用变量名输出就行,示例如下
	cout << arr << endl;

	return 0;
}

2 c++风格字符串:string 变量名 = "字符串值"

#include<iostream>
#include<string>
using namespace std;
int main() {
	
	string arr = "abc";
	//如果想要输出一个字符串,只需要使用变量名输出就行,示例如下
	cout << arr << endl;

	return 0;
}

在使用这种风格的字符串时,必须包含头文件 string(即多写一行#include<string>)

       我们通过c风格字符串的定义方式,可以发现字符串其实就是字符数组。(数组在后面会有介绍。)

注意事项:

  • 在给字符串型变量赋值时,要用双引号将字符串括起来,而不能使用单引号将字符串括起来。一定记住双引号代表着字符串,单引号代表着字符。一定要注意区分!
  • 双引号内可以有任意多个字符,这样就意味着可以有一个字符,也可以没有字符,或者可以有多个字符。没有字符的字符串被叫做空字符串,也是初始化字符串的一种方式。因此我们可以记住:只要是用双引号括起来的,无论括进去了几个字符都属于字符串。

七.布尔类型

含义:  布尔类型代表真或假的值。

bool类型只有两个值:

  • true---真(本质上是1)
  • false---假(本质上是0)
#include<iostream>
using namespace std;
int main() {
	
	bool flag1 = true;

	bool flag2 = false;

	//若你字节输出bool值便可以发现输出的值是1和0
	cout << flag1 << " " << flag2 << endl;

	return 0;
}

布尔类型只占用1个字节。

       如果我们平常热爱探险c++中的知识,那么我们便会发现,在c++中,所有非0值都属于真(true)值,只有0(就是数字0)是假(false)值。 这是一个编程小知识,希望大家能够记住,这个知识点在日常编程中,比较常用。

八.sizeof关键字

作用:sizeof关键字可以计算数据类型和变量所占字节大小

语法:sizeof( 数据类型 / 变量名 )

#include<iostream>
using namespace std;
int main() {
	
	//如果我们要计算 int 数据类型在计算机中所占字节大小,可以使用sizeof进行计算。
	cout << sizeof(int) << endl;

	//如果我们要计算 int 定义的变量在计算机中所占字节大小,可以使用sizeof进行计算。
	int num = 0;
	cout<< sizeof(num) << endl;

	//如果我们要计算 int 定义的数组在计算机中所占字节大小,可以使用sizeof进行计算。
	int arr[4] = { 0 };
	cout<< sizeof(arr) << endl;

	return 0;
}

九.类型转换

如果表达式中存在不同的数据类型,那么便会发生类型转换。

类型转换主要为非两种:隐式类型转换显式类型转换。隐式类型转换和显式类型转换唯一的区别就是前者不需要自己手动转换类型,后者需要自己手动转换类型。

隐式类型转换:在需要时,编译器自动帮助我们进行类型转换。即编译器会在需要时自动将表达式中小范围的数据类型向大范围的数据类型转换。

隐式类型转换是发生在程序运行过程中,目的是为了统一数据类型,以此来满足程序运行的需要。

#include<iostream>
using namespace std;
int main() {
	
	// 例如在这个表达式的右边,它是一个普通的数学计算。
	// 数学计算我们都知道是从左往右依次计算的,因此我们从左往右依次分析这里面的数据类型的转换
	// 
	// 首先遇到的是 true + 2,true是布尔类型,2是 int 类型。
	// 布尔类型的范围是小于int类型的,因此布尔类型会被转换为 int 类型。即 1 + 2 = 3。
	// 
	// 其次遇到的是 3 + 'a',3是 int 类型,'a'是字符型。
	// int 类型的范围是大于字符类型的,因此字符类型会被转换为 int 类型。即 3 + 97 = 100。
	// 
	// 然后遇到的是 97 + 13.14,97是 int 类型,13.14是 double 类型。
	// int 类型的范围是小于 double 类型的,因此 int 类型会被转换为 double 类型。即 100.0 + 13.14 = 113.14。
	// 
	// 最后我们可以发现在里面等号的左右两边的数据类型并不相同。左边的是 int 类型,右边的是 double 类型
	// 我们最后是要给num赋值,而num是 int 类型,所以右边的数据类型要向左边的数据类型保持一致
	// 即右边的 double 类型要变成左边的 int 类型,我们可以发现这里也进行了一次隐式类型转换。
	int num1 = true + 2 + 'a' + 13.14;
	cout << num1 << endl;

	return 0;
}

       运行之后,我们会发现输出的是 113,这是因为 int 这类的整型数据类型只能保存整数。不是只能保存整数,整型为什么会叫整型,是不是觉得我说的很有道理,哈哈哈。

       这是因为当浮点型转换为整型时,只会保存浮点型的整数部分,而小数部分将会被直接舍弃。即113.14直接变成113,舍弃了0.14。
       这里存在着一个非常重要的知识点:当数据范围大的数据类型向着数据范围小的数据类型转换时,可能会发生精度丢失或得到一个我们不想要的数据!就好比如这里的113.14变成了113,它原本是精确到小数点后两位,但是转换之后就变成了只有整数部分,精度变低了。

       因此在不必要的情况下,我们要尽可能的避免数据范围大的数据类型向着数据范围小的数据类型转换。

显式类型转换:在需要时,我们强制的将一种类型转换为另一种类型。显式类型转换也被叫做强制类型转换。

在c++中,强制类型转换有几种方式。在这里我们使用最方便的一种方式进行强制类型转换。

#include<iostream>
using namespace std;
int main() {
	
	//以下两种方式,我们企图将int类型强制转换成了字符型,但是最后输出的结果是不太一样的。
	cout << (char)96 + true << endl;//这里(char)96 + true相当于(char)(96) + true,最后的结果是一个数字 97。
	cout << (char)(96 + true) << endl;//这里(char)(96 + true),最后的结果是一个字母 'a'。

	return 0;
}

大家可以使用我们刚刚学的隐式类型转换来推断为什么会得到那样的结果。

       在使用时,大家一定要想清楚我们要将哪一部分的结果转换为我们需要的数据类型。有时候选取的范围不一样,最后得到的结果,也可能不一样。

十.数据的输入

作用:用于从键盘获取数据

关键字:cin

语法:cin >> 变量 

例如我要输入一个整型数据:

#include<iostream>
using namespace std;
int main() {
	
	int arr = 0;
	cin >> arr;
	cout << arr << endl;

	return 0;
}

       在输入数据时,编译器会为你输入的数据分配一个与你所需数据类型最接近的数据类型。然后再通过类型转换,转换为你所需的数据类型。

       例如你所需的数据类型是 int 整型,但是你输入的数据是 13.14 ,那么编译器便会将 13.14 设置为double 浮点型,再通过类型转换,将浮点型转换为整型,此时 int 整型中保存的数就会是 13,将后面的小数部分舍去;再如果你输入的数据是 a ,那么编译器便会将 a 设置为 char 字符型,此时 int 整型将不会接受到任何数据,也就意味着数据输入失败,但是编译器为了保证数据安全,便会将 int 整型中的数据设置为 0 ,double,float等都是如此,输入失败都会被设置为 0 。

       因此再输入数据时,一定要选取合适的数据类型来接受数据,不然就会造成一些不必要的错误。


作者的题外话:学习编程一定是要多练,多编,如果不去训练,那么过不了几天就会忘记,到时候学了就等于没学。还有就是在日常编程时,思维一定要活跃、灵活。只有这样才能写出一个精妙的程序。希望大家都能学好编程!

大家如果需要看我后续的内容,一定要记得私信催更哦,只有催的人多了,作者才会更快的更新!还有就是如果发现作者写的有问题、有错误一定要私信我进行指出哦。

谢谢大家的支持。


FFTW3精度选择指南:float/double/long double性能对比与避坑实践 本文深入探讨FFTW3库中float、doublelong double三种精度的性能差异与适用场景,提供ARM/x86平台的实测数据与工程实践建议。通过分析硬件架构影响、编译器陷阱及内存对齐优化,帮助开发者避免常见错误并提升计算效率。特别针对FFTW在科学计算中的精度选择难题,给出实用的决策流程图和性能优化技巧。 阅读详情

相关推荐

ROS2原始数据类型与接口

大家好,我是脑壳有点痛的小鱼。今天就不多说其他的,讲一讲ROS2的接口还有基本数据类型 在ROS2中定义接口,需要编写一个接口文件,该文件后缀为msg、srv、action 在接口文件中定义通信过程中所使用的数据类型和数据名称,那可用的数据类型和数据名称有哪些呢?今天小鱼就带你详细了解一下ROS2接口文件中的数据类型和数据名称 1.数据名称 数据名称就是一个字符串,没啥好说的,符合编程语言变量的命名规则就行(比如不能是字母开头)。 2.数据类型 2.1 数据类型有哪些呢? 这里小鱼可以告诉你,原始的数据类型

生活不止眼前的苟且 2805

long double精度数据的使用

poj1191 棋盘覆盖  用到了这种数据类型 我们暂且不说这道题:本文主要讨论long double 的使用。 一、看一下double的使用,double 只能精确到小数点后  15位     //a的实际大小为: 3. 1415926535 8979323846 2643383279 5028841971 double a; a=(double)ac

程序员的冷浪漫 1万+

2024保研经验帖】中科院信工所夏令营经验分享

中科院信工所夏令营经验分享,信工所夏令营据说只要报了就能进,这个是不是真的尚不清楚,不过qq群里有八九百个人,也属实可怕。招生老师说我们这届夏令营招200-300个左右,于是又开始惶惶不安。 夏令营时期都是线上进行,先是每个科室进行线上招生宣讲,然后报名第一志愿部门和第二志愿部门,不同部门的考核是不同的。有的部门只要求英语面试和综合面试,有的部门除了面试还需要机试,而有的部门除了这些还需要笔试。

m0_63002183的博客 4398

int, long long, double数据类型的长度及范围整理

(1)整数类型:byte、short、int、long2)小数类型:float、double (3)字符类型:char (4)布尔类型:boolean 先附上一个比较直观的表,长度表示字节: byte: 字节 bit: 位 1. 短整型short: 所占内存大小:2byte=16bit; 所能表示范围:-32768~32767;(即-2^15~2^15-1) 2. 整型int: 所占内存大小:4byte=32bit; 所能表示范围:-21...

BadSheepC 5万+

longdouble以及高精度的区别

而不是精确的 0.3。这就是舍入误差导致的结果。这种误差对于某些应用程序来说可能没有影响,但对于需要高精度计算的程序来说,就会产生严重的问题。是双精度浮点数类型,double类型的数字都是以。,这就导致了double无法精确存储某些十进制数。比如:0.1,0.2这类十进制数,在二进制中。**例如:**在 double 类型中,的取值范围虽然比double要小,但是。,比如:0.1,0.2等;(无限循环小数),比如。

weixin_57128596的博客 3245

ROS2的基础数据类型

ROS2的基础数据类型

DATABALL 的博客 167

H2内存数据库数据类型

由于H2是由java语言编写的,所以提供的数据类型都和java契合,下面给出数据类型列表:一、基本的数据类型有哪些?1、数字方面 整数(INT) 布尔型(BOOLEAN) 微整数(TINYINT) 小整数(SMALLINT) 大整数(BIGINT) 标识符(IDENTITY) 货币数(DECIMAL) 双精度实数(DOUBLE) 实数(REAL) 2、时间方面 时间(TIME) 日期(DATE)-...

不积跬步 无以至千里 8983

[ Struts2 ] 数据类型转换

1. 为什么需要数据类型转换?          所有的MVC框架都是表现层的解决方案。而表现层主要用来和用户进行交互,负责收集用户的输入和展示服务器的数据    状态。这样数据就有两个流动方向,从服务器流出和进入服务器,而网络传输是以字符的形式进行的。前者不存在数据类    型转换的问题,因为所有的Java数据类型都可以很好的转换成字符串;而后者就存在这个问题,需要将字符串形式的请求

shenhonggeli的专栏 1641

可以用哪些数据类型自定义ROS2消息

这篇文章着重介绍自定义ROS2类型数据时,我们可以使用哪些基础类型。这也是我之前困惑的一个问题。所以这里简单汇总说明一下。关于消息、服务和动作接口的使用说明,请查看本次推送的第一篇推文。 自定义msg示例 定义msg数据和在C++中定义一个结构体是一样的。只是类型名称有些区别。然后不需要加分号。 Header header float64 circle_x float64 circle_y float32[] ranges 自定义service数据示例 service数据包含两个部分:请求和应答。这两部分

首飞的博客 2507

db h2 数据类型_H2Database数据类型

标签:整数(INT)INT | INTEGER | MEDIUMINT | INT4 | SIGNED值的范围为: -2147483648 到 2147483647.对应到Java类型: java.lang.Integer.例如:INT布尔型(BOOLEAN)BOOLEAN| BIT | BOOL可能的值为: TRUE 和 FALSE。对应到Java类型: java.lang.Boolean.例如...

weixin_33722375的博客 538

Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述

Oracle中数据类型描述

PinkCoder 4796

Struts2数据类型转换

对于前台界面向后台传送的数据,strtus2可以帮助我们自动的转换其中的一些,包括:java中8中原生数据类型以及像String、Date等常见数据类型,但对于自定义的数据类型还需要我们自己写转换器进行转换。 1、对于原生数据类型的转换 前台界面提交的表单: 姓名: 年龄: 生日: 身高: struts.xml配置文件:

DR的专栏 1362

Oracle中数据类型 NVARCHAR2 与 VARCHAR2 的对比

VARCHAR2用于存储可变长度的字符数据。数据库默认的字符集进行存储,存储时不进行字符转换。主要用于存储单字节字符集 (single-byte character set, SBCS)。NVARCHAR2用于存储可变长度的字符数据,但支持多字节字符集。通常使用 Unicode 或其他多字节字符集进行存储,支持多语言字符。主要用于存储多字节字符集 (multi-byte character set, MBCS),如中文、日文、韩文等。

文牧之的博客 2887

tensorflow2.1的数据类型

TensorFlow2.0的数据类型有: int, float, double bool string 首先我们简单的创建数据类型: 注:constant,我们TensorFlow1.0版本时,我们将它理解为一个常量,但在TensorFlow2.0时我们将它就理解一个普通的Tensor import tensorflow as tf # 创建一个整型的Tensor tf.consta...

进击的Explorer 275

oracle NVARCHAR2 数据类型

参考地址 https://docs.oracle.com/cd/B19306_01/server.102/b14225/ch7progrunicode.htm#sthref807 英语不好的看中文直译 utf8可能会影响性能,因为它是一个可变宽度字符集。NChar字段的空白填充过多会降低性能。考虑使用nvarchar数据类型或更改为nchar数据类型的al16utf16字符集。 nvarchar...

chuan_zhang_ak的博客 5923

db h2 数据类型_H2数据库函数及数据类型概述-阿里云开发者社区

H2数据库函数及数据类型概述jieforest2015-01-29573浏览量简介:H2数据库函数及数据类型概述一、H2数据库常用数据类型INT类型:对应java.lang.IntegerREAL类型:对应java.lang.FloatDOUBLE类型:对应java.H2数据库函数及数据类型概述一、H2数据库常用数据类型INT类型:对应java.lang.IntegerREAL类型:对应java....

weixin_30631569的博客 979

Axis2: 复杂数据类型传输

Axis2: 复杂数据类型传输 1.开发一个web services (1)新建一个java project,目录结构如下: IDataForm.java package service; public interface IDataForm { public String getName(); } DataForm.java packag

牧海归来 6050

db h2 数据类型_H2数据库函数及数据类型概述

一、H2数据库常用数据类型INT类型:对应java.lang.IntegerREAL类型:对应java.lang.FloatDOUBLE类型:对应java.lang.DoubleDECIMAL类型:对应java.math.BigDecimal,比如DECIMAL(20,2)CHAR类型:对应java.lang.String,比如CHAR(10)VARCHAR类型:对应java.lang.Strin...

weixin_36214833的博客 432

[Dify] 如何构建一个带评分功能的 Dify AI 教练系统

本文介绍如何利用Dify开源平台构建具备自动评分功能的AI教练系统。系统通过Prompt设计AI教练角色,使用OpenAPI定义评分工具接口,结合工作流编排实现提问、回答收集、评分和反馈的全流程。文章详细讲解了从AI教练身份设定、多维度评分标准设计到前端可视化展示的实现方法,并提供了可扩展建议,适用于语言训练、面试模拟等多种场景。该系统展示了Dify平台在构建智能化评估应用方面的优势,实现零代码开发专业AI教练解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 296

C# Winform 用户创建,用户角色创建,用户日志,用户操作权限设置等(数据库)

1、c# mysql使用2、用户创建3、用户角色创建4、用户日志5、用户操作权限设置

上一篇: 1、初见c++
烁星引
博客等级 码龄3年 15粉丝 · 2原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值