在开发中经常会遇到有符号和无符号之间的转换问题,如果不清楚问题根源,很难解决bug,今天小编通过本文给大家分享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++有符号和无符号之间的转换的文章就介绍到这了,更多相关c++有符号无符号转换内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:C++有符号和无符号之间的转换问题
基础教程推荐
猜你喜欢
- 一文带你了解C++中的字符替换方法 2023-07-20
- C++中的atoi 函数简介 2023-01-05
- 如何C++使用模板特化功能 2023-03-05
- C语言 structural body结构体详解用法 2022-12-06
- C利用语言实现数据结构之队列 2022-11-22
- C++详细实现完整图书管理功能 2023-04-04
- C/C++编程中const的使用详解 2023-03-26
- C语言基础全局变量与局部变量教程详解 2022-12-31
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- 详解c# Emit技术 2023-03-25