• C++ 修饰符类型


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

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

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

    • signed

    • unsigned

    • long

    • short

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

            修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀。例如:unsigned long int

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

    1. unsigned x;
    2. unsigned int y;

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

    示例

    1. #include
    2. using namespace std;
    3. /*
    4. * 这个程序演示了有符号整数和无符号整数之间的差别
    5. */
    6. int main()
    7. {
    8. short int i; // 有符号短整数
    9. short unsigned int j; // 无符号短整数
    10. j = 50000;
    11. i = j;
    12. cout << i << " " << j;
    13. return 0;
    14. }

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

    -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)。

    例如,

    1. // 小整数
    2. 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 持有零值整数

    ASCII字符代码表

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

    C++ 中的类型限定符

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

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

    限定符 volatile 说明(参考下面两篇博文):

     volatile在C语言中的基本使用方法_volatile在c语言中的用法_ST小智的博客-CSDN博客

    volatile用法详解(c语言)_volatile在c语言中的用法-CSDN博客 

  • 相关阅读:
    AIGC是什么?对艺术设计学、视觉传达设计、数字媒体艺术等专业的影响
    Towards Real-Time Multi-Object Tracking(JDE)
    Echarts —自定义label标签的样式(formatter,rich,添加图标等操作)
    如何创建美观的邮件模板并通过qq邮箱的SMTP服务向用户发送
    京准、ntp校时服务器(GPS北斗卫星校时器)技术方案
    【HackTheBox Topology】打靶记录
    zabbix自定义监控内容和自动发现
    168-203-javajvm-垃圾收集器
    【代码随想录】算法训练营 第八天 第四章 字符串 Part 1
    基于Vector Smart Logger的自动驾驶路试数据采集方案
  • 原文地址:https://blog.csdn.net/m0_48241022/article/details/133375827