本文小编为大家详细介绍“C++有符号和无符号之间如何转换”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++有符号和无符号之间如何转换”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
先来看一个程序:
#include<iostream> int main() { unsigned a=5; int b=-10; std::cout<<b+b<<std::endl;//正常输出 std::cout<<a+b<<std::endl; return 0; }
打印:-20
4294967291
-20正常打印我们都知道,但当一个有符号和一个无符号之间的数进行相加减会发生什么呢?
是这样的:a+b,首先把负数转换为无符号数,然后在进行运算。
b转换为无符号数就是对b取模,2^32+b,结果为4294967286。
再看:
#include<iostream> int main() { unsigned a=10,b=5; std::cout<<b-a<<std::endl; return 0; }
打印:4294967291
其过程是对运算后的结果-5取模
循环中的发现:
#include<iostream> int main() { unsigned u=5; while(u>=0) { --u; std::cout<<u<<std::endl; } return 0; }
运行结果将是无限打印,原因是:当u=0时,仍能进去循环,然后u=-1了,由于u的类型是unsigned则被取模转换了,则u总是大于0的,所以是无限循环。
此时应将while里面的条件改成:u>0,当u=0时不能进去循环,u不是小于0也就没有类型转换,则循环能终止。
读到这里,这篇“C++有符号和无符号之间如何转换”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。