C++ 修饰符类型

在C ++编程中,类型修饰符用于更改基本数据类型的含义。

C++ 允许在 char、int 和 double 数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。

下面列出了数据类型修饰符:

  • signed

  • unsigned

  • long

  • short

修饰符 signed、unsigned、long 和 short 可应用于整型,signedunsigned 可应用于字符型,long 可应用于双精度型。

修饰符 signedunsigned 也可以作为 longshort 修饰符的前缀。例如:unsigned long int

C++ 允许使用速记符号来声明无符号短整数无符号长整数。您可以不写 int,只写单词 unsigned、shortunsigned、long,int 是隐含的。例如,下面的两个语句都声明了无符号整型变量。

unsigned x;
unsigned int y;

为了理解 C++ 解释有符号整数和无符号整数修饰符之间的差别,我们来运行一下下面这个短程序:

#include <iostream>
using namespace std;
 
/* 
 * 这个程序演示了有符号整数和无符号整数之间的差别
*/
int main()
{
   short int i;           // 有符号短整数
   short unsigned int j;  // 无符号短整数
 
   j = 50000;
 
   i = j;
   cout << i << " " << j;
 
   return 0;
}

当上面的程序运行时,会输出下列结果:

-15536 50000

上述结果中,无符号短整数 50,000 的位模式被解释为有符号短整数 -15,536。

这是一个类型修饰符说明列表:

数据类型大小含义
signed int4 字节
用于整数(等效于int)
unsigned int4 字节只能存储非负整数
short2 字节用于小整数(范围-32768至32767
long至少4字节用于大整数(等于long int)
unsigned long4 字节用于大的正整数或0(等于unsigned long int)
long long8 字节用于非常大的整数(等于long long int)。
unsigned long long8 字节用于非常大的正整数或0(等于unsigned long long int)
long double8字节用于大浮点数
signed char1 字节用于字符(保证范围-127到127
unsigned char1 字节用于字符(范围为0到255

short 类型修饰符

我们可以使用short的小整数(范围−32,767至+32,767)。

例如,

// 小整数
short a = 12345;

在这里,a是一个short整数变量。

注意: short等同于short int。

long 类型修饰符

如果我们需要存储一个大整数(范围为-2147483647至2147483647),则可以使用类型修饰符long。例如,

// 大整数
long b = 123456;

注意: long等同于long int。

long类型修饰符也可以与double变量一起使用。

// 大浮点数
long double c = 0.333333333333333333L;

注意:为了表示long double,我们使用L后缀。如果我们不使用后缀L,则将其double转换为该值long double(可能会导致数据丢失)。

long long

long可以重复两次以创建long long类型。此类型用于比long更大的数字。long long类型修饰符只能与int一起使用。

例如,

// long long int
long long num = 12345678;

signed 和 unsigned 修饰符

有符号(signed)变量可以包含整数和负整数,包括。例如,

// 正整数值
signed int x = 23;

// 负整数值
signed int y = -13;

// 0值整数
signed int z = 0;

这里,

  • x持有一个正值整数

  • y持有一个负值整数

  • z持有零值整数

无符号变量(unsigned)只能容纳非负整数。例如,

// 正值整数
unsigned int x = 2;
unsigned int y = 0;

这里,

  • x 持有一个正值整数

  • y 持零

通常,int变量可以存储范围为从 -2,147,483,648 到 2,147,483,647 的值。而unsigned int变量可以存储范围为 0 到 4,294,967,295 的值。

有符号(signed),无符号(unsigned)和普通字符(plain char)

C ++有3种不同char类型:char,signed char和unsigned char。实际上,基本上只有两种类型:signed char和unsigned char。

这是因为即使char与标准C ++中的signed char或unsigned char不相同,不同的编译器也会根据自己的喜好将char视为signed char或unsigned char。

注意:当我们仅使用char而不是signed char或unsigned char时,此类型称为plain char(普通字符)

您可能已经猜到了,signed char可以存储正整数和负整数,而unsigned char只能存储正整数(包括0)。

signed char可以存储的整数值的保证范围是-127到127,而unsigned char的范围是0到255

// 普通字符
char plain_1 = 65;
char plain_2 = 0;

// 带负值的普通字符
// 可能会导致某些编译器出现问题
char plain_3 = -56;

// signed char
signed char  sin_1 = 12;
signed char  sin_2 = 0;
signed char  sin_3 = -12;

// unsigned char
unsigned char  unsin_1 = -85;
unsigned char  unsin_2 = 0;

这里,

  • plain_1 持有一个正值整数

  • plain_2 持有零值整数

  • sin_1 持有一个正值整数

  • sin_2 持有零值整数

  • sin_3 持有一个负值整数

  • unsin_1 持有一个负值整数

  • unsin_2 持有零值整数

注意:最好不要使用普通字符来执行数字操作;应使用signed char 或 unsigned char代替。纯字符应仅用于存储字符值。

C++ 中的类型限定符

类型限定符提供了变量的额外信息。

限定符含义
constconst 类型的对象在程序执行期间不能被修改改变。
volatile修饰符 volatile 告诉编译器不需要优化volatile声明的变量,让程序可以直接从内存中读取变量。对于一般的变量编译器会对变量进行优化,将内存中的变量值放在寄存器中以加快读写效率。
restrictrestrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。