《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 默认为int
,size()
返回类型为size_t
即unsigned 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 后,会变成一个非常大的正数。
下一篇: HDU1878 欧拉回路