易码技术论坛

 找回密码
 加入易码
搜索
查看: 299107|回复: 4

[C语言]正整数系的加/减法的定义

[复制链接]
发表于 2006-10-30 19:29:39 | 显示全部楼层
看的一头雾水
原理是什么啊?
发表于 2006-10-30 19:38:36 | 显示全部楼层
这个...为什么要把一条指令拆成这个样子...
发表于 2006-10-30 21:51:49 | 显示全部楼层
发现楼主和我一样 发帖喜欢用那个表情~~~
 楼主| 发表于 2006-10-31 18:39:22 | 显示全部楼层
回lee。。原理是二进制的加法法则。。
看下列  半加器  的  真值表。。
其中a,b是输入。。c,s是输出。
c代表 和 的 低位 值
s代表 和 的 高位 值
a  b   c  s
0  0   0  0
0  1   1  0
1  0   1  0
1  1   0  1
从以上真值表中可以明显看出。。
c=a xor b
s= a and b

回yzk0370。。确实没这个必要。。加法器一般是在硬件层就实现了。。

回混乱羽翼。。^_^。。
 楼主| 发表于 2006-10-30 19:15:27 | 显示全部楼层 |阅读模式
  1. #include <stdio.h>
  2. typedef unsigned int uint ;
  3. uint add(uint a,uint b){   
  4.    uint c,s;
  5.    c=a&b;             //And
  6.    s=a^b;             //Xor
  7.    if (!c)return s;
  8.    else return add(s,c<<1);
  9. }
  10. void main(){
  11.    uint a;
  12.    a=add(100,98);
  13.    printf("%u",a);
  14. }
复制代码
小改一下就定义了减法。。
  1. #include <stdio.h>
  2. typedef unsigned int uint ;
  3. uint minus(uint a,uint b){   
  4.    uint c,s;
  5.    c=~a&b;             //借位
  6.    s=a^b;             //Xor
  7.    if (!c)return s;
  8.    else return minus(s,c<<1);
  9. }
复制代码

以上是递归定义。。
如你喜欢也可改成循环。。不过。。有时候循环要考虑到赋值顺序。。比较罗嗦。。
  1. #include <stdio.h>
  2. typedef unsigned int uint ;
  3. uint add(uint a,uint b){   
  4.    uint c,s;
  5.    c=a&b;             //And
  6.    s=a^b;             //Xor
  7.   for(;c;a=s,b=c<<1);
  8.   return s;
  9. }
复制代码
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-28 04:54 , Processed in 0.009732 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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