欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

《C++ Primer Plus》读书笔记

程序员文章站 2022-04-15 16:09:59
本文旨在记录在阅读《C++ Primer Plus》第五版的过程中,一些重点的知识点,方便以后查阅。本文将不断更新...... 一、第三章 1、无符号整型不能存储负数值,其优点是可以增大变量能够存储的最大值。例如short表示的范围是-32768-32767,则无符号版本的表示范围为0-65535; ......

  本文旨在记录在阅读《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\n";
else
    cout << "lose\n";

你的答案是 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 后,会变成一个非常大的正数。