矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 2880|回复: 8

终于知道计算器原理了

[复制链接]
     
发表于 2021-11-17 11:07:57 | 显示全部楼层 |阅读模式
QQ截图20211117110555.jpg
  1. #include <stdio.h>
  2. int v;
  3. void sum(int a,int b){
  4.         v=0;
  5.         for(int i=0;i<8;i++){
  6.                 int c1=(a>>i&1),c2=(b>>i&1);
  7.                 v|=(c1^c2&1)<<i;
  8.                 //printf("[%d] %d %d %d \n",i,c1,c2,v);
  9.                 if(c1&c2){
  10.                         v|=1<<i+1;
  11.                 }
  12.         }
  13.         printf("%d+%d=%d\n",a,b,v);
  14. }
  15. int main(int argc, char *argv[]){
  16.         /*1+2=3,1+10=11,1+0=1
  17.         2+2=4,10+10=100,0+0=0
  18.         1+1=2,1+1=10,1+1=10*/
  19.         sum(1,2);
  20.         sum(2,2);
  21.         sum(1,1);
  22. }
复制代码

看了下科普帖 https://www.zhihu.com/question/29432827 ,然后自己实现了一下
     
 楼主| 发表于 2021-11-17 11:12:52 | 显示全部楼层
QQ截图20211117111230.jpg
这程序应该实际可以计算到32位
回复 支持 反对

使用道具 举报

     
发表于 2021-11-17 12:23:34 | 显示全部楼层
这个不是计算器原理,这只是个程序,硬件计算器其实是加法器

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2021-11-17 12:38:40 | 显示全部楼层
twsg 发表于 2021-11-17 12:23
这个不是计算器原理,这只是个程序,硬件计算器其实是加法器

你没看明白楼主的程序,

普通的 C 语言程序要计算 a+b,直接写一句 a+b 就行了,楼主写了那么多,就是用(按位)逻辑操作符(& 与,| 或,^ 异或)和移位操作符(<< >>)模拟了一个加法器,在逻辑层面去理解加法器的工作原理

回复 支持 反对

使用道具 举报

     
发表于 2021-11-17 12:49:13 | 显示全部楼层
washu 发表于 2021-11-17 12:38
你没看明白楼主的程序,

普通的 C 语言程序要计算 a+b,直接写一句 a+b 就行了,楼主写了那么多,就是 ...

确实,没有细看程序,惭愧,惭愧
回复 支持 反对

使用道具 举报

     
发表于 2021-12-2 07:37:29 来自手机 | 显示全部楼层
这只是最基本的加法器单元,而完善的计算器还有
很多模块
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-12-2 09:12:26 | 显示全部楼层
bobjams 发表于 2021-12-2 07:37
这只是最基本的加法器单元,而完善的计算器还有
很多模块

所以偷偷的买了个FPGA,打算真正的实现一波
回复 支持 反对

使用道具 举报

     
发表于 2021-12-4 14:48:39 | 显示全部楼层
本帖最后由 scu319hy 于 2021-12-4 15:08 编辑

我来给楼主挑刺
楼主的累加过程只考虑了 源操作数 当前位的进位, 丢失了上一次的进位。
test.png

送楼主一个修正版
test2.png

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2022-1-12 21:35:41 | 显示全部楼层
学习了学习了

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 09:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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