《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/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 后,会变成一个非常大的正数。

分享给朋友:
您可能感兴趣的文章:
随机阅读: