请教一个小程序

[复制链接]
 楼主| 发表于 2012-9-12 07:42 | 显示全部楼层 |阅读模式
本帖最后由 渤海三叠浪 于 2012-9-12 07:43 编辑

两个字节 INT8U i  和 INT8U  jif (两个数的差的绝对值大于5) {
       j = i;
}

请问这程序咋写?
发表于 2012-9-12 07:50 | 显示全部楼层
1# 渤海三叠浪


  1. if((i>j+5)||(j>i+5))
  2. {
  3.       j=i;
  4. }
发表于 2012-9-12 08:05 | 显示全部楼层


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2012-9-12 09:31 | 显示全部楼层
本帖最后由 渤海三叠浪 于 2012-9-12 09:33 编辑

楼上感谢你啊  不过请问 你考虑溢出了么
发表于 2012-9-12 13:56 | 显示全部楼层
本帖最后由 airwill 于 2012-9-12 13:58 编辑

对啊, 2楼 的程序没有考虑溢出问题, 所以是有 BUG 的.
类似问题, 我以前是这样处理的: (我假设INT8U 是 unsigned char)
if((i-j+5)>10)
{
      j=i;
}
大家看看有没有问题.
发表于 2012-9-12 17:52 | 显示全部楼层
对啊, 2楼 的程序没有考虑溢出问题, 所以是有 BUG 的.
类似问题, 我以前是这样处理的: (我假设INT8U 是 unsigned char)
if((i-j+5)>10)
{
      j=i;
}
大家看看有没有问题. ...
airwill 发表于 2012-9-12 13:56


要是怕溢出还不简单嘛,呵呵,直接设个中间变量,该中间变量的取值范围比i,j大一倍不就行了嘛,例如此处设一中间变量:signed   long int k;

然后再加或减就行了啊。

这个方法是不是有点缺心眼啊。。。:L
发表于 2012-9-12 21:26 | 显示全部楼层
本帖最后由 airwill 于 2012-9-13 07:20 编辑

to 楼上, 你的办法不错, 不过不觉得效率太低吗?
特别是在 8 位机里, 弄个 16 位变量出来.
我的代码还是8位运算和比较, 如果可以避免溢出的影响, 效率又高
怎么叫 "缺心眼" 呢?
发表于 2012-9-12 23:36 | 显示全部楼层
本帖最后由 416775364TP 于 2012-9-12 23:42 编辑

还是有毛病,都有溢出,中间变量比较靠谱
发表于 2012-9-13 08:29 | 显示全部楼层
to 楼上, 你的办法不错, 不过不觉得效率太低吗?
特别是在 8 位机里, 弄个 16 位变量出来.
我的代码还是8位运算和比较, 如果可以避免溢出的影响, 效率又高
怎么叫 "缺心眼" 呢? ...
airwill 发表于 2012-9-12 21:26


我说我那个扩展字长的方法显得有点缺心眼,不是说你那个,呵呵,你误会了。
 楼主| 发表于 2012-9-13 10:11 | 显示全部楼层
多谢楼上各位大侠

这样怎么样  大家觉得

if ((i   > j) && (i - j ) >5)  ||  ((j  > i) && (j - i ) >5)
发表于 2012-9-13 11:17 | 显示全部楼层
if ( abs(i - j) > 5 ) {

}
 楼主| 发表于 2012-9-16 22:01 | 显示全部楼层
11# wookongbun
你这abs不算  不让用。
除非你给出函数   函数咋写  多谢   不能只有原型啊
 楼主| 发表于 2012-9-16 22:01 | 显示全部楼层
多谢楼上各位大侠

这样怎么样  大家觉得

if ((i   > j) && (i - j ) >5)  ||  ((j  > i) && (j - i ) >5)
渤海三叠浪 发表于 2012-9-13 10:11

我这咋样 大家say  say
发表于 2012-9-16 22:09 | 显示全部楼层
13# 渤海三叠浪
这个可以啊
发表于 2012-9-18 16:59 | 显示全部楼层
#define ABS(x)                                         ((x) >= 0) ? (x) : -(x)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

637

帖子

1

粉丝
快速回复 返回顶部 返回列表