首页 > 其他分享 >基本数据类型

基本数据类型

时间:2024-04-24 20:26:14浏览次数:23  
标签:基本 操作数 int 数据类型 unsigned C++ long 类型

1. 变量命名规则

C++命名规则:

  • 在名称中只能使用字母字符、 数字和下划线(_)。

  • 名称的第一个字符不能是数字。

  • 区分大写字符与小写字符。不能将C++关键字用作名称。

如果想用两个或更多的单词组成一个名称, 通常的做法是用下划线字符将单词分开, 如my_onions; 或者从第二个单词开始将每个单词的第一个字母大写, 如myEyeTooth。  

2. 整型变量

2.1 整型

整数就是没有小数部分的数字, 如2、98、-5286和0。不同C++整型使用不同的内存量来存储整数。C++的基本整型(按宽度递增的顺序排列)分别是char、short、int、 long和C++11新增的long long,其中每种类型都有符号版本和无符号版本,因此总共有10种类型可供选择。  

计算机内存由一些叫做位(bit) 的单元组成 。 C++的short、int、long和long long类型通过使用不同数目的位来存储值,最多能够表示4种不同的整数宽度。 

  • short至少16位;

  • int至少与short一样长;

  • long至少32位, 且至少与int一样长;

  • long long至少64位, 且至少与long一样长。 

这4种类型(int、 short、 long和long long) 都是符号类型,这意味着每种类型的取值范围中,负值和正值几乎相同。例如,16位的int的取值范围为-32768到+32767。 头文件climits(在老式实现中为limits.h)中包含了关于整型限制的信息。

符 号 常 量 表 示
CHAR_BIT char的位数
CHAR_MAX char的最大值
CHAR_MIN char的最小值
SCHAR_MAX signed char的最大值
SCHAR_MIN signed char的最小值
UCHAR_MAX unsigned char的最大值
SHRT_MAX short的最大值
SHRT_MIN short的最小值
USHRT_MAX unsigned short的最大值
INT_MAX int的最大值
INT_MIN int的最小值
UNIT_MAX unsigned int的最大值

LONG_MAX long的最大值
LONG_MIN long的最小值
ULONG_MAX unsigned long的最大值
LLONG_MAX long long的最大值
LLONG_MIN long long的最小值
ULLONG_MAX unsigned long long的最大值

2.2 无符号类型

前面介绍的4种整型都有一种不能存储负数值的无符号变体,其优点是可以增大变量能够存储的最大值。要创建无符号版本的基本整型, 只需使用关键字unsigned来修改声明即可: 

unsigned short change; // unsigned short type
unsigned int rovert;   // unsigned int type
unsigned quarterback;  // also int type\unsigned本身是unsigned int的缩写。
unsigned long gone;    // unsigned long type
unsigned long long lang_lang; // unsigned long long type

2.3 整型字面值

C++能够以三种不同的计数方式来书写整数:基数为10、基数为8和基数为16。C++使用前一(两)位来标识数字常量的基数。

  • 如果第一位为1~9,则基数为10(十进制),因此93是以10为基数的。

  • 如果第一位是0,第二位为1~7,则基数为8(八进制),因此042的基数是8, 它相当于十进制数34。

  • 如果前两位为0x或0X,则基数为16(十六进制),因此0x42为十六进制数,相当于十进制数66。对于十六进制数,字符a~f和A~F表示了十六进制位,对应于10~15。0xF为15,0xA5为165(10个16加5个1)。   

如果要以十六进制或八进制方式显示值,则可以使用cout的一些特殊特性。前面指出过,头文件iostream提供了控制符endl,用于指示cout重起一行。同样,它还提供了控制符dec、hex和oct,分别用于指示cout以十进制、十六进制和八进制格式显示整数。 

int chest = 42;
int waist = 42;
int inseam = 42;
cout << chest << endl; // 42
cout << hex;
cout << waist << endl; // 2a,制符hex实际上是一条消息,告诉cout采取何种行为。
cout << oct;
cout << chest << endl; // 52

3. char类型 

char类型是专为存储字符(如字母和数字) 而设计的。 现在, 存储数字对于计算机来说算不了什么, 但存储字母则是另一回事。 编程语言通过使用字母的数值编码解决了这个问题。 因此,char类型是另一种整型,虽然char最常被用来处理字符,但也可以将它用做比short更小的整型。

4. bool类型

ANSI/ISO C++标准添加了一种名叫bool的新类型。

bool is_ready = true;

字面值true和false都可以通过提升转换为int类型, true被转换为1,而false被转换为0: 

int ans = true; // 1
int promise = false; // 0

5. 浮点数

使用浮点类型可以表示诸如2.5、3.14159和122442.32这样的数字,即带小数部分的数字。计算机将这样的值分成两部分存储。一部分表示值,另一部分用于对值进行放大或缩小。  

例如:对于数字34.1245和34124.5,它们除了小数点的位置不同外,其他都是相同的。可以把第一个数表示为0.341245(基准值)和100(缩放因子),而将第二个数表示为0.341245(基准值相同)和10000(缩放因子更大)。 

4.1 书写浮点数

C++有两种书写浮点数的方式。 第一种是使用常用的标准小数点表示法:

  • 12.34

  • 939001.32

  • 0.00023

  • 8.0

第二种表示浮点值的方法叫做E表示法, 其外观是像这样的: 

  • 3.45E6,这指的是3.45与1000000相乘的结果,E6指的是10的6次方, 即1后面6个0 

因此,3.45E6表示的是3450000,6被称为指数,3.45被称为尾数。指数可以是正数也可以是负数。然而,数字中不能有空格,因此7.2 E6是非法的。

4.2 浮点类型

C++有3种浮点类型:float、double和long double。这些类型是按它们可以表示的有效数位和允许的指数最小范围来描述的。

  • float至少32位

  • double至少48位, 且不少于float

  • long double至少和double一样多

这三种类型的有效位数可以一样多。然而,通常,float为32位,double为64位,long double为80、96或128位。 

4.3 浮点常量

在程序中书写浮点常量的时候,程序将把它存储为哪种浮点类型呢?

在默认情况下,像8.24和2.4E8这样的浮点常量都属于double类型。如果希望常量为float类型,请使用f或F后缀。对于long double类型,可使用 l 或 L 后缀。

1.234f        // a float constant
2.45E20F      // a float constant
2.345324E28   // a double constant
2.2L          // a long double constant

5. 类型转换

C++丰富的类型允许根据需求选择不同的类型, 这也使计算机的操作更复杂。因此计算机需要处理大量不同的情况,尤其是对不同的类型进行运算时。为处理这种潜在的混乱,C++自动执行很多类型转换:

  • 将一种算术类型的值赋给另一种算术类型的变量时,C++将对值进行转换;

  • 表达式中包含不同的类型时,C++将对值进行转换;

  • 将参数传递给函数时,C++将对值进行转换。  

5.1 初始化和赋值进行的转换 

C++允许将一种类型的值赋给另一种类型的变量。这样做时,值将被转换为接收变量的类型。 

例如, 假设so_long的类型为long,thirty的类型为short,而程序中包含这样的语句: 

so_long = thirty;

则进行赋值时,程序将thirty的值(通常是16位)扩展为long值(通常为32位)。扩展后将得到一个新值,这个值被存储在so_long中,而thirty的内容不变。

下面列出了一些可能出现的转换问题:

转换 潜在的问题
将较大的浮点类型转换为较小的浮点类型, 如将double转换为float 精度(有效数位) 降低, 值可能超出目标类型的取值范围, 在这种情况下, 结果将是不确定的
将浮点类型转换为整型 小数部分丢失, 原来的值可能超出目标类型的取值范围, 在这种情况下, 结果将是不确定的
将较大的整型转换为较小的整型, 如将long转换为short 原来的值可能超出目标类型的取值范围, 通常只复制右边的字

5.2 以{ }方式初始化时进行的转换(C++11) 

C++11将使用大括号的初始化称为列表初始化,因为这种初始化常用于给复杂的数据类型提供值列表,类型转换的要求更严格。

具体地说,列表初始化不允许缩窄,即变量的类型可能无法表示赋给它的值。例如,不允许将浮点型转换为整型。在不同的整型之间转换或将整型转换为浮点型可能被允许,条件是编译器知道目标变量能够正确地存储赋给它的值。例如,可将long变量初始化为int值,因为long总是至少与int一样长;相反方向的转换也可能被允许, 只要int变量能够存储赋给它的long常量: 

5.3  表达式中的转换 

当同一个表达式中包含两种不同的算术类型时,将出现什么情况呢?在这种情况下,C++将执行两种自动转换:首先,一些类型在出现时便会自动转换;其次, 有些类型在与其他类型同时出现在表达式中时将被转换。

编译器通过校验表来确定在算术表达式中执行的转换:

  • 如果有一个操作数的类型是long double,则将另一个操作数转换为long double。

  • 否则,如果有一个操作数的类型是double,则将另一个操作数转换为double。 

  • 否则, 如果有一个操作数的类型是float,则将另一个操作数转换为float。

  • 否则, 说明操作数都是整型, 因此执行整型提升。

  • 在这种情况下,如果两个操作数都是有符号或无符号的,且其中一个操作数的级别比另一个低, 则转换为级别高的类型。 

  • 如果一个操作数为有符号的,另一个操作数为无符号的,且无符号操作数的级别比有符号操作数高, 则将有符号操作数转换为无符号操作数所属的类型。

  • 否则,如果有符号类型可表示无符号类型的所有可能取值,则将无符号操作数转换为有符号操作数所属的类型。

  • 否则,将两个操作数都转换为有符号类型的无符号版本。   

5.4 传递参数时的转换 

5.5 强制类型转换 


 
 
 


 

 

标签:基本,操作数,int,数据类型,unsigned,C++,long,类型
From: https://www.cnblogs.com/love-9/p/18156215

相关文章

  • 利用MOS管构成基本的数字逻辑门
    欢迎各位朋友关注“郝旭帅电子设计团队”,本微信公众号会定时更新相关技术类资料、软件等等,希望各位朋友都能在本微信公众号获得一些自己想要的“东西”。          非门原理图中上面是PMOS(控制端带有小圆圈是PMOS,给予低电平导通),下面是NMOS(给予高电平导通)。当A端为......
  • 团队练习1:PM 的基本技术训练 – 案例分析在PM 带领下, 每个团队深入分析下面行业的软件
    团队练习1:PM的基本技术训练–案例分析在PM带领下,每个团队深入分析下面行业的软件,找到行业的Top5(选以下中的一个)英语学习/词典App笔记App旅游行业的手机App要求本团队成员亲身用过这些软件,给每个软件一个评级,并分析它的优点和缺点;不能照抄网络上的排名!在学习通提......
  • grid布局的基本使用
    1、首先需要在父容器中设置display属性display:grid//设置容器中子元素为栅格布局2、其次最重要的就是确定容器中行数和列数,通过行数和列数形成具体的网格状布局,这也是栅格布局的由来由两个属性grid-template-columns和grid-template-row来分别决定行数和列数grid-temp......
  • 【Vim】基本操作
    命令模式下i:光标前插入a:光标后插入o:下一行插入I:行首插入A:行末插入O:上一行插入HJKL移动光标:左下上右^跳转行首$跳转行尾yy复制内容可以使用{数字}yy实现复制n行比如2yy就是复制光标开始计算的2行p粘贴内容可以使用3p实现粘贴3次比如3p就是从光标所......
  • 3年经验来面试20K的测试岗,连基本功都不会,还不如去招应届生
    为了新项目做准备,这段时间公司面了不少人,竟然没有一个满意的。一开始瞄准的就是中高级的水准,也没指望来技术大牛,提供的薪资在15-25K,面试的人很多,但结果让人失望。从简历上来说都是3-4年工作经验,但面试中,不会工具方法和编程框架,基本功的技术很多也不熟练,多数人多年的工作经验......
  • 依赖倒置原则的基本用法和介绍
    依赖倒置原则(DependencyInversionPrinciple,DIP)是面向对象设计和软件工程中五大基本原则(SOLID原则)之一。该原则主要强调了两个关键方面:高层模块不应该依赖于低层模块,它们两者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。在C#中实现依赖倒置原则,通常涉及以下......
  • 单项循环链表的一些基本操作
    //设计单向循环列表/***********************************************filename:circularlinkedlist.c*author:[email protected]*date:2024/4/23*function:设计单向循环列表*note:None*CopyRight(c)2023-2024邮箱AllRightReseverd**************************......
  • docker 镜像和容器的基本命令
    1.基本镜像命令(1)搜索镜像仓库dockersearchmysqldockersearchmysql:5.7(2)拉取镜像dockerpullmysql dockerpullmysql:5.7(3)查看镜像 dockerimages dockerimage(4)删除镜像dockerrmi镜像ID dockerrmi-f镜像ID(强制删除) 2.基本容......
  • Redis(1)_Redis的基本认识
    初识Redis特征键值(key-value)型,value支持多种不同数据结构,功能丰富单线程,每个命令具备原子性低延迟,速度快(基于内存、IO多路复用、良好的编码)支持数据持久化支持主从集群、分片集群支持多语言客户端Redis命令数据结构Redis为了方便学习,将操作不同数据类型的命令做了分......
  • markdown基本使用
    状态图声明状态```mermaidstateDiagram状态1```stateDiagram状态1状态描述```mermaidstateDiagramstate"状态描述性文字"as状态2``````mermaidstateDiagram状态3:状态3的文字描述```......