php条件运算符加法器,【加法笔记系列】JS 加法器模拟
JS 加法器模拟,实现
半加器
全加器
波纹进位加法器
全部代码
补码 & 减法
常规位运算
位运算 & 简单的 assert 断言
// 常规位运算
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators
const AND = (a, b) => a & b;
const OR = (a, b) => a | b;
const XOR = (a, b) => a ^ b;
const NOT = a => ~a;
// Fake Node Assert Lib
const assert = {
deepEqual: (a, b) => {
if (a.toString() === b.toString()) return;
throw new Error(`Not Equal: ${a} ${b}`);
}
}
半加器
电路逻辑
电路简要
/**
* 半加器
* 两个 bit 输入,输出数组 [进位,和]
* 如:
* 1,1 => [1, 0]
* @param {bit} a 输入
* @param {bit} b 输入
*/
const HalfAdder = (a, b) => [a & b, a ^ b];
// 半加器测试
assert.deepEqual(HalfAdder(0, 0), [0, 0]);
assert.deepEqual(HalfAdder(0, 1), [0, 1]);
assert.deepEqual(HalfAdder(1, 0), [0, 1]);
assert.deepEqual(HalfAdder(1, 1), [1, 0]);
全加器
电路逻辑
电路简要
概要表示
概要表示
/**
* 全加器
* 两个 bit 输入,和进位输入,输出数组 [进位,和]
* 如:
* 0,1,1 => [1, 0]
* @param {bit} a 输入
* @param {bit} b 输入
* @param {bit} c 进位输入
*/
const FullAdder = (a, b, c) => {
var t1 = HalfAdder(a, b);
var t2 = HalfAdder(t1[1], c);
return [t1[0] | t2[0], t2[1]];
}
// 全加器测试
assert.deepEqual(FullAdder(0, 0, 0), [0, 0]);
assert.deepEqual(FullAdder(1, 0, 0), [0, 1]);
assert.deepEqual(FullAdder(0, 1, 0), [0, 1]);
assert.deepEqual(FullAdder(0, 0, 1), [0, 1]);
assert.deepEqual(FullAdder(1, 1, 0), [1, 0]);
assert.deepEqual(FullAdder(1, 0, 1), [1, 0]);
assert.deepEqual(FullAdder(0, 1, 1), [1, 0]);
assert.deepEqual(FullAdder(1, 1, 1), [1, 1]);
波纹进位加法器
简要图
简要图2
常见芯片表示
/**
* 波纹加法器, 4 位加法器
* 如:
* [0, 1, 0, 1],[0, 1, 0, 1] => [1, 0, 1, 0]
* @param {Array} a 4位 bit 输入数组,如:[0, 1, 0, 1]
* @param {Array} b 4位 bit 输入数组,如:[0, 1, 0, 1]
* @returns {Array}
*/
const RippleCarryAdder = (a, b) => {
let carry = 0;
let bit = 3;
let result = [];
while(bit >= 0) {
let temp = FullAdder(a[bit], b[bit], carry);
carry = temp[0];
result.push(temp[1]);
bit--;
}
return result.reverse();
}
/**
* 将数字转成 4 位二进制数组
* 如:
* 1 => [0, 0, 0, 1]
* 3 => [0, 0, 1, 1]
* @param {Number} a 数字
* @returns {Array}
*/
const to4Bit = a => (
a.toString(2)
.split('')
.reverse()
.concat(Array(4).fill('0'))
.slice(0,4)
.reverse()
.map(i => +i)
);
/**
* 将二进制字符串转为数字
* 如:
* '1010' => 10
* @param {String} a 4 位二进制字符串
* @returns {Number}
*/
const from4Bit = a => parseInt(a, 2);
/**
* 加法简写工具
* @param {Number} a 输入
* @param {Number} b 输入
*/
const helper = (a, b) => (
from4Bit(RippleCarryAdder(
to4Bit(a),
to4Bit(b)
).join(''))
)
assert.deepEqual(helper(0, 0), 0);
assert.deepEqual(helper(1, 1), 2);
assert.deepEqual(helper(1, 2), 3);
assert.deepEqual(helper(2, 2), 4);
assert.deepEqual(helper(3, 5), 8);
assert.deepEqual(helper(1, 14), 15);
// 9 + 14 为 23,但由于我们写的是 4 位加法器,所以有溢出
// 最终的结果需要 mod 0x10(也就是 16)
assert.deepEqual(helper(9, 14), 23 % 0x10);
assert.deepEqual(helper(9, 14), 7);
全部代码
关于补码 & 减法
我们以 4 bit 存储数字,并以最高位作为符号位
数字
原码
反码
补码
非溢出的十进制
2
0010
0010
0010
2
-1
1001
1110
1111
15
-3
1011
1100
1101
13
2 - 1 = 2 + (- 1) = 0010(补)+ 1111(补)= 0010(补)= 17 % 16 = 1
2 - 3 = 2 + (- 3) = 0010(补)+ 1101(补)= 1111(补)= 15 % 16 = -1
References
php条件运算符加法器,【加法笔记系列】JS 加法器模拟相关推荐
- 【加法笔记系列】逻辑门、半加器、全加器、波纹进位加法器
在之前了解 PN 结以及逻辑电路实现之后,终于可以开始尝试实现计算机的加法了. 逻辑门,包括与.或.与非.异或 半加器,半加器电路 全加器,全加器电路 波纹进位加法器 逻辑门 与门 AND 或门 OR ...
- 【加法笔记系列】逻辑电路的实现
了解完二极管和 PM 结原理后,就可以看懂简单的逻辑电路了 载流子 场效应管 与门 AND 二极管实现 继电器实现 CMOS 实现 NMOS 实现 或门 OR 或非 NOR 与非 NAND 载流子 在 ...
- vue 计算属性_lt;Vue 源码笔记系列6gt;计算属性 computed 的实现
1. 前言 原文发布在语雀: <Vue 源码笔记系列6>计算属性 computed 的实现 · 语雀www.yuque.com 上一章我们已经学习过 watch,这一章就来看一下计算属性 ...
- 两个运放制作加法器_同相加法器电路图_反相加法器电路图_运放加法器电路图解析...
在电子学中,加法器是一种数位电路,其可进行数字的加法计算.加法器是产生数的和的装置.加数和被加数为输入,和数与进位为输出的装置为半加器.若加数.被加数与低位的进位数为输入,而和数与进位为输出则为全加器 ...
- vue如何让一句代码只执行一次_lt;Vue 源码笔记系列4gt;异步更新队列与$nextTick...
1. 前言 原文发布在语雀: <Vue 源码笔记系列4>异步更新队列与$nextTick · 语雀www.yuque.com 上一章我们讲到了修改数据是如何触发渲染函数的观察者,最终调用 ...
- 多语言笔记系列:Polyglot Notebooks 中使用 Html
多语言笔记系列之:在 Polyglot Notebooks 中使用 Html 方式一:纯(传统)html方式 <!-- 主动声明单元格为 html 单元格,可以省略后在右下方选择! --> ...
- 行波进位加法器C语言,行波进位加法器原理
算术运算是数字系统的基本功能,更是计算机中不可缺少的组成单元.本节介绍加法运算和减法运算的逻辑电路. 一.半加器和全加器 1.半加器 半加器和全加器是算术运算电路中的基本单元,它们是完成1位二进制数相 ...
- SQL Server 2008/2012中SQL应用系列及BI学习笔记系列--目录索引
SQL Server 2008中的一些特性总结及BI学习笔记系列,欢迎与邀月交流. 3w@live.cn ◆0.SQL应用系列 1.SQL Server 2008中SQL增强之一:Values新用途 ...
- 《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core 解决方案结构解析1
<ASP.NET Core In Action>读书笔记系列五 ASP.NET Core 解决方案结构解析1 参考文章: (1)<ASP.NET Core In Action> ...
最新文章
- HDUOJ------Worm
- IAR 中打多个断点出现 one or more breakpoints coule not be set and have been disabled原因及解决方案
- MySQL有什么新功能?
- buffer string builder简单说明
- lq分解的matlab语言,MATLAB-语言及其应用.ppt
- 敏捷个人新体系学习 - 1.实践的艺术
- matlab和C/C++混合编程--Mex (转载)
- 深度学习2.0-42.Auto-Encoders-无监督学习
- 解决SQL数据库无法附加
- Mapped Statements collection already contains value for com.wen.mapper.ProjectMapper.xxx
- SREng日志全分析(一)
- windows7 照片查看器无法打开图片, windows提示因为可用内存不足,但我的内存4G?
- 组合最优化——期中总结
- 《Photoshop修饰与合成专业技法》目录—导读
- 企业实施PDM能解决这些问题
- 微信小游戏开发新手教程14-整合到一起,做出你的小游戏
- python交互式和文件式区别_Python 运行.py文件和交互式运行代码的区别详解
- 文件管理器和FTP客户端:ForkLift for Mac
- Java条形码生成-Barcode4j
- 辗转相除法——求最大公约数(易懂详解)
热门文章
- SQL解析利器General SQL Parser
- IDEA 2021.1正式发布,新增了这几个超实用功能!
- ArrayList(Map(k v))相关操作和遍历
- 数学差学计算机和编程难吗,数学很差能学计算机吗
- java基础环境搭建_java基础环境搭建
- Java lang3的 StringUtils.isNumeric(str)不能识别负数和小数
- LeetCode第12题 整数转罗马数字
- (备忘)卸载微软自带输入法
- 20151227感知机(perceptron)
- 基于MSP430F413水果电池供电的低功耗时钟