菜鸟的天花板

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  23 随笔 :: 0 文章 :: 0 评论 :: 2161 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
C++的算术类型:        
  bool(布尔类型)、char(字符)、wchar_t(宽字符)、char16_t(Unicode字符)、char32_t(Unicode字符)、short(短整型)、int(整型)、long(长整型)、long long(长整型)、float(单精度浮点数,6位有效数字)、double(双精度浮点数,
10位有效数字)、long double(扩展精度浮点数,10位有效数字)
 
  其中long long是在C++11中新定义的。
 
    注:选择类型的一些经验准则:
    1)当明确知晓数值不可能为负时,选用无符号类型。
    2)使用int执行整数运算时。在实际应用中,short常常显得太小而long一般和int有一样的尺寸。如果数值超过int的表示范围,选用long long。
    3)在算术表达式中不要使用char或bool,只有在存放字符或布尔值时才使用它们。因为类型char在一些机器上是有符号的,而在另一些机器上又是无符号的,所以如果使用char进行运算特别容易出错。如果你需要使用一个不大的整数,那么明确指定它的类型是signed char或者unsigned char。
    4)执行浮点数运算选用double,这是因为float通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。事实上,对于某些机器来说,双精度运算甚至比单精度还快。long double提供的精度在一般情况下是没有必要的,况且它带来的运行时消耗也不容忽视。
 
类型所能表示的值的范围决定了转换的过程:
        1)把一个非布尔类型的算术值赋给布尔类型时,初始值为0则结果为flase,否则结果为true;
        2)把布尔值赋给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1;
        3)当把一个浮点数赋给整数类型时,进行近似处理,结果将只保留浮点数中小数点之前的数值;
        4)当把一个整数值赋给浮点类型时,小数部分记为0,如果该整数所占空间超过了浮点类型的容量,精度可能有损失;
        5)当赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。
        6)当赋给有符号类型一个超出它表示范围的值时,结果是未定义的,此时程序可能继续工作、可能崩溃,也可能生成垃圾数据。
 
当一个算术表达式中既有无符号数又有int值时,int值就会转换成无符号数,如:
        unsigned int u =10;
        int i =-42;
        std::cout<<u+i<<std::endl;  // 如果int占32位,输出4294967264
       
当从无符号数中减去一个数时,不管这个值是不是无符号数,都必须确保结果不会是负值。
    注:切勿混用带符号类型和无符号类型。
 
整型字面值类型:                                       
          后缀                    最小匹配类型 
          u or U                 unsigned 
          l or L                   long
          ll or LL                long long          
 
浮点型字面值:
     后缀                                              类型
     f or F                                             float
     l or L                                             long double
默认的,浮点型字面值是double类型。
 
字符串类型
如果两个字符串字面值位置紧邻且仅由空格、缩进和换行符分割时,则它们实际上是一个整体。因此都书写的字符串字面值比较长,写在一行不合适时,就可以采取分开写的方式,如:
      std::cout << "a really,really long string literal "
                               "that spans two lines"<<std::endl;
有两类字符是程序员不可直接使用的:一类是不可打印字符,如退格或其他控制字符,因为它们没有可视的图符;另一类是在C++语言中有特殊含义的字符(单引号、双引号、问号、反斜线)。这时,
就需用到转义序列,转义序列以反斜线开始,C++规定的转义序列包括:
        换行符(\n)    横向制表符(\t)      报警(响铃)符(\a)        纵向制表符(\v)      退格符(\b)       双引号(\")        反斜线(\\)      问号(\? )     单引号(\')
        回车符(\r)    进纸符(\f)
 
字符合字符串字面值类型:
            前缀                                  含义                                                        类型
                u                         Unicode16字符                                      char16_t
                U                                   Unicode32字符                                      char32_t
                L                                   宽字符                                                    wchar_t
                u8                                 UTF-8(仅用于字符串字面常量)         char
 
 
 
posted on   菜鸟1234567  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示