C++有符号和无符号之间的转换
2015-10-24 20:35
330 查看
先来看一个程序:
4294967291
-20正常打印我们都知道,但当一个有符号和一个无符号之间的数进行相加减会发生什么呢?
是这样的:a+b,首先把负数转换为无符号数,然后在进行运算。
b转换为无符号数就是对b取模,2^32+b,结果为4294967286。
再看:
其过程是对运算后的结果-5取模
循环中的发现:
此时应将while里面的条件改成:u>0,当u=0时不能进去循环,u不是小于0也就没有类型转换,则循环能终止。
#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语言 概念整理 第一章 我梦老师倾情奉献
- C++ 多态的实现机制
- effective c++ 在资源管理类中小心copying 行为
- VC++ 控制外部程序,向外部程序发送一个消息的方法
- c++ 读取所有图片
- 第一个包含类的C++程序
- c语言链式存储实现
- C++设计模式 之 “对象创建”模式:Factory Method、Abstract Factory、Prototype、Builder
- 杭电ACM2017-字符串统计
- C++迭代器 iterator
- C++对象模型——默认构造函数的合成
- C++的几个知识点
- VC++ 在控件上写字时 字体的设置技巧
- 005--C++字符
- C++ 中的 Lambda 表达式
- 剑指offer第二十九题【最小的K个数】c++实现
- C语言 计算1!+2!+3!+4!
- 【ThinkingInC++】53、构造函数,析构函数,全局变量
- 统计1到100出现9的次数 1.0
- C++ stl vector