免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
打印 上一主题 下一主题

不用四则运算,怎么实现 var = var+1 ? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-10-04 18:07 |只看该作者
实现一个新的operator行么?

论坛徽章:
0
12 [报告]
发表于 2006-10-04 18:34 |只看该作者
实现 operator 没必要。

我算法差极,暂时还没想到方法。

00 | 01 = 01
10 | 01 = 11
11 ^ 11 = 00 (加进位)

向这个方向考虑吧

论坛徽章:
0
13 [报告]
发表于 2006-10-04 18:37 |只看该作者
1、++ 是一元运算, 而 + 是二元运算,本质的不同。

2、


  1. unsigned int
  2. add_one (unsigned int a)
  3. {
  4.         unsigned i=1;
  5.         if (!(i & a))
  6.                 return a | i;
  7.         else
  8.                 a=a^i;
  9.         i<<=1;

  10.         while (i & a) {
  11.                 a^=i;
  12.                 i<<=1;
  13.         }
  14.        
  15.                 return a | i;
  16. }
复制代码

[ 本帖最后由 win_hate 于 2006-10-4 18:46 编辑 ]

评分

参与人数 1可用积分 +5 收起 理由
converse + 5 我很赞同

查看全部评分

论坛徽章:
0
14 [报告]
发表于 2006-10-04 21:52 |只看该作者
楼上的是最直接的实现方法。谢谢!
我应该先想想,其实思路有了,就是没有动手,呵呵!

  1. unsigned int inc(unsigned int val){

  2.         int off = 0;
  3.         while (val & (1 << off)) val ^= 1 << off++;  
  4.                
  5.         if (off || !(val & 1)) val |= 1 << off;
  6.         return val;
  7. }
复制代码

论坛徽章:
0
15 [报告]
发表于 2006-10-04 23:58 |只看该作者
原帖由 awk就是awp加ak 于 2006-10-4 05:52 发表
楼上的是最直接的实现方法。谢谢!
我应该先想想,其实思路有了,就是没有动手,呵呵!

  1. unsigned int inc(unsigned int val){

  2.         int off = 0;
  3.         while (val & (1 << off)) v ...
复制代码


你的代码不是用了 ++ 了吗?off++ 也行的话为什么不能 val++ ?

论坛徽章:
0
16 [报告]
发表于 2006-10-05 09:53 |只看该作者
啊。。我错了,哈哈

论坛徽章:
0
17 [报告]
发表于 2006-10-05 09:57 |只看该作者
不过这改起来应该很简单了,用个变量替换就可以

论坛徽章:
0
18 [报告]
发表于 2006-10-05 10:07 |只看该作者
这样了!

  1. unsigned int inc(unsigned int val){

  2.         int off = 1;
  3.         while (val & off) {
  4.                 val ^= off;
  5.                 off <<= 1;
  6.         }

  7.         if (off == 1 || !(val & 1)) val |= 1 << (off >> 1);
  8.         return val;
  9. }
复制代码

论坛徽章:
0
19 [报告]
发表于 2006-10-05 10:08 |只看该作者
谢谢大家!

论坛徽章:
0
20 [报告]
发表于 2006-10-05 16:19 |只看该作者
笨,偶发现最后一个 if 是多此一举了!
  1. unsigned int inc(unsigned int val){

  2.         int off = 1;
  3.         while (val & off) {
  4.                 val ^= off;
  5.                 off <<= 1;
  6.         }

  7.         return val | off;
  8. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP