卧龙小说网> > > 2.1.2节练习

2.1.2节练习

2.1.2节练习

2.1.2节练习

练习2.3:读程序写结果。

unsigned u = 10 u2 = 42;

std::cout << u2 - u << std::endl;

std::cout << u - u2 << std::endl;

int i = 10 i2 = 42;

std::cout << i2 -i << std::endl;

std::cout << i - i2 << std::endl;

std::cout << i - u << std::endl;

std::cout << u - i << std::endl;

出题思路:本题考查的知识点包括:无符号数的计算、带符号数的计算以及混合计算。

解答:

程序的运行结果是:

32

4294967264

32

-32

0

0

u和u2都是无符号整数,因此u2-u得到了正确的结果(42-10=32);u-u2也能正确计算,但是因为直接计算的结果是-32,所以在表示为无符号整数时自动加上了模,在做着的编译环境中int占32位,因此加模的结果是4294967264。

i和i2都是带符号整数,因此中间两个式子的结果比较直观,42-10=3210-42=-32。

在最后两个式子中,u和i分别是无符号整数和带符号整数,计算时编译器先把带符号数转换为无符号数,幸运的是,i本身是一个正数,因此转换后不会出现异常情况,两个式子的计算结果都是0。

不过需要提醒读者注意的是,一般情况下请不要在同一个表达式中混合使用无符号类型和带符号类型。因为计算前带符号类型会自动转换成无符号类型是,当带符号类型取值为负时就会出现异常结果。

练习2.4:编写程序检查你的估计是否正确,如果不正确,请仔细研读本节知道弄明白问题所在。

出题思路:本体旨在考察同时含有无符号类型和带符号类型的表达式的的计算问题。

解答:对于读程序写结果的题目,读者首先应该根据本节知识点独立思考,在脑海中勾勒出题目的考察角度和关键点,进而写出结果并在编译环境中加以验证。

通过练习本题,尤其是观察u-u2的异常结果,进一步理解无符号类型和带符号类型的区别。读者不妨思考,你是否能用上述4个变量组合出其他产生异常结果的式子?应该如何避免这种情况?


普通的冒险故事提示您:看后求收藏(卧龙小说网http://www.wolongxs.com),接着再看更方便。

好书推荐:《我的剧本世界在自主运行》《我是舰娘》《我的师妹是妖女》《交错世界之学院都市》《认清现实后,她们开始追夫火葬场》《好徒儿你就饶了为师伐》

目录