社区
C++ 语言
帖子详情
请教高手:if (i>j) 和 if (i-j>0)是否等价?
Robincen
2006-11-02 11:12:33
今天笔试考到了一道题,我不知道从哪方面回答:
对于int型变量i,j,条件判断
if (i>j) 和 if (i-j>0)是否等价?给出理由
...全文
1299
47
打赏
收藏
请教高手:if (i>j) 和 if (i-j>0)是否等价?
今天笔试考到了一道题,我不知道从哪方面回答: 对于int型变量i,j,条件判断 if (i>j) 和 if (i-j>0)是否等价?给出理由
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
47 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiao2004
2006-11-05
打赏
举报
回复
靠,i,j类型,关键看这个。
w_anthony
2006-11-05
打赏
举报
回复
绝对不等价
i=0x7fffffff,j=0x80000000时就不等价,还有一堆相似的相减溢出数都会不等价
就像问if (i==0) 和 if (i==-i)是否等价一样,结果也是不等价。
因为0x00000000和0x80000000同时满足后者,而满足前者的只有0x00000000
dyh1919
2006-11-05
打赏
举报
回复
看完各位的回复
只想说:学习. *_*
believeken
2006-11-05
打赏
举报
回复
向你们学习.....
swteetlove
2006-11-04
打赏
举报
回复
学习
maingg
2006-11-04
打赏
举报
回复
肯定是不等价的
sf0210
2006-11-04
打赏
举报
回复
sf
阿发伯
2006-11-04
打赏
举报
回复
完全等价,汇编码的cmp eax,edx和sub eax,edx除了保存计算结果的区别外,基本是等价的
metaliclp
2006-11-04
打赏
举报
回复
学习ing
做鸡真好吃
2006-11-04
打赏
举报
回复
关注~
OOPhaisky
2006-11-03
打赏
举报
回复
除此之外,就是效率方面的问题了......
OOPhaisky
2006-11-03
打赏
举报
回复
有可能产生溢出。
i<0,j>0时,可能下溢出;
i>0,j<0时,可能上溢出;
这两种情况下,if (i>j) 和 if (i-j>0)不等价。
leilei821006
2006-11-03
打赏
举报
回复
int型的取值范围是-32768~32767
所以i-j的范围为-32768~32767 ,当两个数有正有负的时候,就有可能溢出
而i>j不存在这个问题!!
agaric
2006-11-03
打赏
举报
回复
跟具体数据类型有关.可能会不同.
g_lbz
2006-11-03
打赏
举报
回复
看过了各位的高见
我觉得也不等价,主要是益处的问题了
jianshi051
2006-11-03
打赏
举报
回复
学习了!~
mczxm
2006-11-03
打赏
举报
回复
我认为是不等的了如上面所说的这两个数可能为负
frankinbj
2006-11-03
打赏
举报
回复
还真没考虑这个问题
BrightLiuW3
2006-11-03
打赏
举报
回复
/*
Name: BrightLiuW3
Copyright:
Author:
Date: 03-11-06 06:42
Description:
个人看法, 不足和错误的地方请大家纠正...学习...
不要扔石头...
*/
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
char x, y, z;//分配一个字节存储整数...为了方便 :) ... (-128 - 127)
x = 127;
y = -128;
cout<<static_cast<int>(x)<<endl;
cout<<static_cast<int>(y)<<endl;
z = y - x;
cout<<static_cast<int>(z)<<endl; // z = 1; z > 0; (y > x???) 溢出???
z = x - y;
cout<<static_cast<int>(z)<<endl; // z = -1; z < 0; (x < y???) 溢出...
//牵扯到溢出的情况...较难判断...一般应控制所有变量在其范围之内...
//有时候结果虽然不对...但是也不一定溢出啊...都是边界犯的错???
//z也应该满足: -128<= z <= 127
x = 127;
y = 127;
cout<<(x + y)<<endl; //output: 254 ... 大于127了啊... ???
cout<<fixed<<pow(2, 126)<<endl;//output:85070591730234616000000000000000000000.000000
cout<<fixed<<pow(2, 127)<<endl;//output:
//32位系统中...pow(2, 126)存在常量堆中...最多可分配126bits...(自己试的...)
//故不必担心溢出问题...所以(x + y)输出了254而没有溢出...
//(你会用到如此大的数???你用的着为一个数分配如此大的空间???莫非你想???)
}
// 下面回答lz的问题...
// 我认为应该是等价的...原因是: i - j 存放在堆中...
// 你要是应把i - j的值搞的堆里放不下...那我也没办法了...
// 不过...你既然定义了i 和 j 应该不会超过...堆的范围吧...
// 除非你自己定义的i和j的数据类型...你好强...
maxlcl
2006-11-03
打赏
举报
回复
是的,如果考虑到j是负数的时候,有可能溢出!
加载更多回复(27)
CCNA_CCNP 思科网络认证 动态路由 EIGRP 和 OSPF
# EIGRP度量值 EIGRP度量值 带宽 延迟 可靠性 负载 最大路径和跳数 默认支持4条
等价
路径 最大跳数100,也可以设置成255 # EIGRP三张表 邻居关系表 拓扑表 路由表 # EIGRP专业术语 可行距离(FD)&...
在python中、下列代码的输出是什么-智慧树知到《Python程序设计基础》章节测试答案...
智慧树知到《Python程序设计基础》章节测试答案绪论1、学好Python程序设计要注意的几个问题是A:多看多练B:多想多整理C:多交流多
请教
D:只看视频,不思考、不练习答案: 多看多练,多想多整理,多交流多
请教
2、本门课程将...
C++笔试题目大全
样的: 1->2->3->4->5 通过反转后成为 5->4->3->2->1 。 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个 元 素,然后将当前节点元素的指针反转后,利用已经存储的指针往...
Spark中RDD和DataFrame、DataSet的区别?---面试题
RDD、DataFrame和DataSet的区别 <!-- 作者区域 --> <div class="author"> <a class="avatar" href="/u/92a1227beb27"> <img ...
vc数据类型转换大全
int i = 100;long l = 2001;float f=300.2;double d=12345.119;char username[]="程佩君";char temp[200];char *buf;CString str;_variant_t v1;_bstr_t v2;一、其它数据类型转换为字符串 短整型(int)itoa(i,temp,10...
C++ 语言
64,676
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章