小小的数据类型转换

zhjjing 2009-06-11 08:36:20
今天项目遇见一个问题,数据类型转换的问题
描述如下:


echisdnlist.Cout();这是个链表内容个数计算函数,解析出是个 unsinged int 数值

有个整型的变量 定义为:int numbernow = 0;
程序如下:
if (numbernow - echisdnlist.Cout() >= 0)
{
//执行某些代码
}
else
{
//......

}
这样的程序就出错了,大家一眼看出程序错在哪吗??

后来我这样写
int tempisdncout = echisdnlist.Cout();

if (numbernow - tempisdncout >= 0)
{
//执行某些代码
}
else
{
//......

}
就对了。

问了几个同事都不知道为什么,后来查了《C++程序设计语言》才知道问题根源。


...全文
77 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
UpdateEveryday 2009-06-17
  • 打赏
  • 举报
回复
我记得 ANSI_C标准详解 里面说 类型转换符合保值原则, 即有符号数A 和无符号数B一起操作, A的类型如果能包含B类型的所有取值,那就把B转换成A类型,
否则就是 A转到B
zhjjing 2009-06-16
  • 打赏
  • 举报
回复
恩,是这样的啊。都对的啊
yang_e_2009 2009-06-11
  • 打赏
  • 举报
回复
学习了~
amossavez 2009-06-11
  • 打赏
  • 举报
回复
你第二种写法跟第一种还是有区别的!!第二种是显式的强制类型转为int这样就不会有逻辑错误了!
lylm 2009-06-11
  • 打赏
  • 举报
回复
隐式类型转换,int-》unsigned int
ly309431053 2009-06-11
  • 打赏
  • 举报
回复
在int和unsigned int ,同时出现的时候,int 转换为unsigned int,所有你的条件一直都是成立!
C_Plus87 2009-06-11
  • 打赏
  • 举报
回复
int - unsigned int 其结果应该是是unsigned int,int被提升了
adventurelw 2009-06-11
  • 打赏
  • 举报
回复
程序出错有编译错误,也有逻辑错误
楼主的大概是逻辑错误,int 标准转换成 unsigned int, 运算之后的结果也是unsigned int, 不会小于0,只能执行if{}语句块

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧