免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2006-10-05 16:31 |只看该作者
原帖由 awk就是awp加ak 于 2006-10-5 16:19 发表
笨,偶发现最后一个 if 是多此一举了!
[code]unsigned int inc(unsigned int val){

        int off = 1;
        while (val & off) {
                val ^= off;
                off <<=  ...


有“智”不在年高。鼓励一下!

论坛徽章:
0
22 [报告]
发表于 2006-10-05 16:42 |只看该作者
如此抬举,老朽不胜感激!

论坛徽章:
0
23 [报告]
发表于 2006-10-05 20:35 |只看该作者
#include <stdio.h>
int main(void)
{
    unsigned int i;
    unsigned locatebitzero=1;
    usigned int mask=0xFFFE;
    printf("input i:");
    scanf("%u",&i);
    while(i&locatebitzero){locatebitzero<<=1;mask<<=1;}
    i&=mask;i|=locatebitzero;
    printf("%u\n",i);
    retun 0;
}

论坛徽章:
0
24 [报告]
发表于 2006-10-05 22:22 |只看该作者
哈哈,不错

论坛徽章:
0
25 [报告]
发表于 2006-10-06 10:23 |只看该作者
楼主,不用四则运算而用位操作的原因是什么?

论坛徽章:
0
26 [报告]
发表于 2006-10-06 17:40 |只看该作者
只是一个奇怪的题目要求,没有实际用处

论坛徽章:
0
27 [报告]
发表于 2006-10-19 13:39 |只看该作者
-var = ~var + 1,
所以
var + 1 = -(~var),
对var取反,再取其负值就得到var + 1。

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
28 [报告]
发表于 2006-10-19 13:45 |只看该作者
查表算不算?
a[256]={1,2,3,...,255,0}
var=a[var]

论坛徽章:
0
29 [报告]
发表于 2006-10-19 14:25 |只看该作者
原帖由 awk就是awp加ak 于 2006-10-4 10:24 发表
可以用位运算


asm (lea var,%eax; inc (%eax); )

[ 本帖最后由 chzht001 于 2006-10-19 14:26 编辑 ]

论坛徽章:
0
30 [报告]
发表于 2006-10-26 15:48 |只看该作者
原帖由 Elite 于 2006-10-19 13:39 发表
-var = ~var + 1,
所以
var + 1 = -(~var),
对var取反,再取其负值就得到var + 1。

妙!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP