• 《C++ Primer Plus》读书笔记之——处理数据


      本文旨在记录在阅读《C++ Primer Plus》第五版的过程中,一些重点的知识点,方便以后查阅。本文将不断更新......

    一、第三章 处理数据

      1、无符号整型不能存储负数值,其优点是可以增大变量能够存储的最大值。例如short表示的范围是-32768-32767,则无符号版本的表示范围为0-65535;假设有一个short变量sam和一个unsigned short变量sue,分别设置为最大的short值,比如是32767,然后将两个变量都加1,这对于sue没有问题,但sam的值从32767变为-32768!同样,对于sam,将其值设置为0再减去1,也不会有问题;但对于sue,将其值设置为0将去1后,它变为65535!

    需要注意:

    string str = "123456";
    
    if (-1 < str.size())
        cout << "win
    ";
    else
        cout << "lose
    ";

    你的答案是 win,是么?那么很遗憾的告诉你,NO,答案是;lose!!!

    为何?其实很简单的问题,类型不一致。

    -1 默认为intsize()返回类型为size_tunsigned int

    1 size_t x = 1;
    2 int y = -1;
    3 cout << x + y << endl;               // 0 (-1会变成nusigned int所能表示的最大整数,加上1之后,变成0)
    4 cout << typeid(x+y).name() << endl;  // unsigned int

    两种类型进行操作,int 类型的 - 1 会被自动转为unsigned int,即:

    1          (unsigned int) + -1         (int)
      0000...0001(unsigned int) + 1111...1111(int)
    = 0000...0001(unsigned int) + 1111...1111(unsigned int)
    = 0000...0000(unsigned int)

    显而易见,int 类型的 - 1 转为 unsigned int 后,会变成一个非常大的正数。

      2、C++有11种整型和3种浮点类型,因此计算机会处理大量不同的情况,尤其是对不同的类型进行运算时。为处理这种潜在的混乱,C++自动执行很多类型转换:

    ①赋值时进行的转换:C++允许将一种类型的值赋给另一种类型的变量。这样做时,值将被转换为接收变量的类型。将一个值赋给取值范围更大的类型通常不会导致什么问题,但是相反,则可能会带来麻烦,比如降低精度等。

    ②表达式中的转换:当运算涉及到两种类型时,较小的类型将转换为较大的类型。例如:9.0/5,由于9.0的类型为double,因此程序在用5除之前,将5转化成double类型。

    ③传递参数时的转化:传递参数时的类型转化通常由C++函数原型控制。

    ④强制类型转化:C++允许通过强制类型转换机制显示地进行类型转换。强制类型转换的格式有两种:

     (typeName) value    C语言

     typeName (value) C++语言,新格式的想法是,要让强制类型转换就像是函数调用。

     

  • 相关阅读:
    数据同步之rsync
    unity中 ump打包后其他电脑运行摄像头无画面
    Unity中使用ini配置文件
    Unity云台控制大华摄像头
    unity中物体没有挂载任何脚本却可以运行
    Unity导入模型后没有颜色的问题
    Unity中人物靠近门时自动开门
    Unity测量周长小工具
    Unity 中System.Runtime.InteropServices读取配置文件
    unity C# 计算3D空间任意多边形面积,距离,角度测量工具
  • 原文地址:https://www.cnblogs.com/smile233/p/8488380.html
Copyright © 2020-2023  润新知