【C/C++基础入门】二、数据类型

【C/C++基础入门】二、数据类型

2. 数据类型

  • ‌  C++规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存。
  •    按照计算机的存储方式可分为两大基本类型:整数类型和浮点数类型。
    

‌2.1 字节与位

‌  位: 计算机最小的存储单元是位(bit),可以储存0或1(或者说,位用于设置“开”或“关”)。

‌  字节: 字节(byte)是常用的计算机存储单位。对于几乎所有的机器,1字节均为8位。既然1位可以表示0或1,那么8位字节就有256(2的8次方)种可能的0、1的组合。通过二进制编码(仅
用0和1便可表示数字),便可表示0~255的整数或一组字符。


‌2.2 整型

‌  ‌‌1、在C/C++中,整数就是没有小数部分的数。

‌  2、C++的基本整型(按宽度递增的顺序排列)分别是char、short、int、long和C++11新增的long long,==他们的区别就是占用的内存空间不同。==其中每种类型都有符号版本和无符号版本,因此总共有10种类型可供选择。

‌  3、计算机以二进制数字储存整数,例如,整数7以二进制写是111。
image.png


‌ 2.2.1 short、int、long、long long

  • C/C++提供了一种灵活的标准,它确保了最小长度,如图所示:
    ‌‌  1、 short 至少16位;
    ‌  2、 int 至少与 short 一样长;
    ‌  3、 long 至少32位,且至少与int一样长;
    ‌  4、 long long 至少64位,且至少与 long 一样长。
  • 意义: 给变量分配合适的内存空间,避免空间浪费问题
数据类型占用空间取值范围
short(短整型)2字节(16位)(-215~215-1)
int(长整型)4字节(32位)(-231~231-1)
long(长整型)windows为4字节(32位),Linux为4字节(32位),8字节(64位)(-231~231-1)
long long(长长整形)8字节(64位)(-263~263-1)
‌  整型结论:short < int <= long <= long long
  • 声明变量: 数据类型 数据名称
  • 初始化变量: 数据类型 数据名称 = 变量初始值;
    ‌  在C/C++中初始化可以直接在声明中完成。
int hogs = 21; 
int cows = 32, goats = 14;

‌‌  总结: 声明为变量创建和标记存储空间,并为其赋值。
image.png


2.3 浮点型

‌  1、浮点数与数学中实数的概念差不多。2.75、3.16E7、7.00 和 2e-8 都是浮点数。注意,在一个值后面加上一个小数点,该值就成为一个浮点值。所以,7是整数,7.00是浮点数。显然,书写浮点数有多种形式。
‌  2、关键要理解浮点数和整数的储存方案不同。计算机把浮点数分成小 数部分和指数部分来表示,而且分开储存这两部分。因此,虽然7.00和7在 数值上相同,但是它们的储存方式不同。在十进制下,可以把7.0写成 0.7E1。这里,0.7是小数部分,1是指数部分。
image.png


‌ 2.3.1 float、double、long double

作用: 用于表示小数

浮点型变量分为三种
‌   1. 单精度float
‌   2. 双精度double
‌   3. ‌long double  
区别在于表示的有效数字范围不同用

数据类型占用空间有效数字范围
float4字节7位有效数字
double8字节15~16位有效数字
long double10、12、16字节不比 double 低

‌2.4 数据溢出

  • 整数溢出
#include <stdio.h>
int main(void) 
{ 
int i = 2147483647; 
unsigned int j = 4294967295; 
printf("%d %d %d\n", i, i+1, i+2); 
printf("%u %u %u\n", j, j+1, j+2);
return 0; 
}

‌  运行结果如下:
image.png
‌  把无符号整数j看作是汽车的里程表。当达到它能表示的最大值时,会重新从起始点开始。整数 i 也是类似的情况。它们主要的区别是,在 超过最大值时,unsigned int 类型的变量 j 从 0开始;而int类型的变量i则从 −2147483648开始。

  • 浮点数的上溢与下溢

‌  假设系统的最大float类型值是3.4E38,编写如下代码:

float toobig = 3.4E38 * 100.0f;
printf("%e\n", toobig);

‌  这是一个上溢(overflow)的示例。当计算导致数字过 大,超过当前类型能表达的范围时,就会发生上溢。在这种情况下会给toobig赋一个表示无穷大的 特定值,而且printf()显示该值为inf或infinity(或者具有无穷含义的其他内 容)。

‌  当除以一个很小的数时,情况更为复杂。回忆一下,float类型的数以指 数和尾数部分来储存。存在这样一个数,它的指数部分是最小值,即由全部 可用位表示的最小尾数值。该数字是float类型能用全部精度表示的最小数 字。现在把它除以 2。通常,这个操作会减小指数部分,但是假设的情况 中,指数已经是最小值了。所以计算机只好把尾数部分的位向右移,空出第 1 个二进制位,并丢弃最后一个二进制数。以十进制为例,把一个有4位有 效数字的数(如,0.1234E-10)除以10,得到的结果是0.0123E-10。虽然得 到了结果,但是在计算过程中却损失了原末尾有效位上的数字。这种情况叫 作下溢(underflow)。


2.5 char 型

作用: 字符型便于用于显示单个字符

语法: char 变量名 = ‘单一字符’

数据类型占用空间取值范围(有符号)取值范围(无符号)
char一个字节(8位)-128~127(signed char)0~255(unsigned char)
  • 注意1:在现实字符型变量时,用单引号将字符括起来,不要用双引号

  • 注意2:单引号内只能有一个字符,不可以是字符串

  • C/C++中字符型变量只占用一个字节。

  • 字符型变量并不是把字符本身放到内存中储存,而是将对应的ASCII编码存放到存储单元中
    ‌  char类型用于存储单个字符(字母,数字,标点符号)char是整数类型,因为char类型实际上存储的是整数而不是字符
    image.png


2.6 bool 型

‌  C99标准添加了 Bool 类型,用于表示布尔值,即逻辑值true和false。因 为C语言用值1表示true,值0表示false,所以 Bool 类型实际上也是一种整数 类型。但原则上它仅占用1位存储空间。


2.7 转义字符

作用: 用于表示一些不能显示出来的ASCII字符,单引号只适用于字符、数字和标点符号,浏览ASCII表会发现,有些ASCII字符打印不出来。

#include <iostream>
using namespace std;
int main(){
	cout << "hello world\n"; // \n是换行
	cout << "\\" << endl; // \\时输出“\”
	cout << "aaa\thello world" << endl;
	/* \t表示tab,固定八个字符,不够八个用空格补充,可以更整齐的输出后面的内容*/
	cout << "aaaaaa\thello world" << endl;
	system("pause");
	return 0;
}

2.8 sizeof关键字

作用: 利用sizeof可以统计数据类型所占内存大小(以字节位单位)

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

示例:

#include <iostream>
using namespace std;
int main(){
	//利用sizeof求出数据类型或者变量所占的内存空间
	short num1 = 10;
	cout << "short占用的空间为:" << sizeof(short) << endl;
	cout << "short占用的空间为:" << sizeof(num1) << endl;
	system("pause");
	return 0;
}

‌  对于类型,应写 成sizeof(char)或sizeof(float);对于特定量,可写成sizeof name或sizeof 6.28。 尽管如此,还是建议所有情况下都使用圆括号,如sizeof(6.28)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值