- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我试图通过对位进行运算来理解加、减、除和乘的方法。
由于在事件发生后运行许多计算,因此有必要在我的 JavaScript 程序中进行一些优化。
通过使用下面的代码作为引用,我能够理解进位包含 &ing 值。然后通过执行 XOr 将 sum var 设置为每个 n1/n2 变量中不匹配的位。
这是我的问题。;) 将 (n1 & n2)<<1 移动 1 有什么作用?这样做的目的是什么?与 XOr 一样,很明显不需要对这些位执行任何其他操作,因为它们的十进制值和它们在 sum var 中一样是可以的。我无法在脑海中想象 & shift 操作正在完成什么。
function add(n1,n2)
{
var carry, sum;
// Find out which bits will result in a carry.
// Those bits will affect the bits directly to
// the left, so we shall shift one bit.
carry = (n1 & n2) << 1;
// In digital electronics, an XOR gate is also known
// as a quarter adder. Basically an addition is performed
// on each individual bit, and the carry is discarded.
//
// All I'm doing here is applying the same concept.
sum = n1 ^ n2;
// If any bits match in position, then perform the
// addition on the current sum and the results of
// the carry.
if (sum & carry)
{
return add(sum, carry);
}
// Return the sum.
else
{
return sum ^ carry;
};
};
上面的代码按预期工作,但它不返回浮点值。我必须将总数与浮点值一起返回。
有没有人有我可以使用上面的函数来帮助我处理浮点值?网站是否清楚地解释了我要寻找的内容?我试过搜索最后一天是这样,但找不到任何可以查看的内容。
我从这个资源中得到了上面的代码。 http://www.dreamincode.net/code/snippet3015.htm
经过思考,左移到 1 的位置就是乘以 2。
通过这样的 &ing :carry = (n1 & n2) << 1; 进位变量将保存由 n1 和 n2 中的匹配位置编译而成的二进制字符串。因此,如果 n1 为 4 且 n2 为 4,则它们都具有相同的值。因此,通过将两者组合并右移到 1 索引将乘以 4 x 2 = 8;所以进位现在等于 8。
1.) var 进位 = 00001000 =8 & 00001000 =8
2.) carry = 现在持有单个值 00001000 =8
左移将乘以 8 x 2 =16,或 8 + 8 = 16
3.)carry = carry <<1 , 将所有位移动一个位置
4.) 进位现在拥有单个值 00010000 = 16
我仍然找不到任何关于处理浮点值的信息。如果有人有任何东西,请发布链接。
最佳答案
它不起作用,因为代码假定 float 表示为整数,而事实并非如此。 float 使用 IEEE 754 标准表示,该标准将数字分为三部分:符号 位、一组表示指数 的位,以及另一组表示1(含)和 2(不含)之间的数字,尾数,值的计算方式为
(sign is set ? 1 : -1) * (mantissa ^ (exponent - bias))
偏差取决于 float 的精度。因此,您用于将两个数字相加的算法假定这些位代表一个整数,而 float 则不是这种情况。按位与和按位或等运算也不会给出您在整数世界中所期望的结果。
一些例子,在 double 中,数字 2.3 表示为(十六进制)4002666666666666,而数字 5.3 表示为 4015333333333333。对这两个数字进行 OR 运算将得到 4017777777777777,它(大致)表示 5.866666。
关于这种格式有一些很好的建议,我在 http://www.psc.edu/general/software/packages/ieee/ieee.php 找到了链接, http://babbage.cs.qc.edu/IEEE-754/和 http://www.binaryconvert.com/convert_double.html非常适合理解它。
现在,如果您仍想为这些数字实现按位加法,您可以。但是您必须将数字分解成各个部分,然后将数字标准化为相同的指数(否则您将无法添加它们),对尾数执行加法,最后将其标准化回 IEEE754格式。但是,正如@LukeGT 所说,您可能不会获得比您正在运行的 JS 引擎更好的性能。而一些 JS 实现甚至不支持对 float 的按位运算,所以通常最终会发生的是他们先将数字转换为整数,然后再执行运算,这也会使你的结果不正确。
关于javascript - 保留 float 并在javascript中添加按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474501/
我知道问题的标题听起来很奇怪,但我不知道该怎么调用它。 首先,我有一个网格布局,我希望我的 .search-wrapper 宽度为 50% 并向右浮动。在我的演示中 jsfiddle整个 .searc
我们正在使用 QA-C 来实现 MISRA C++ 一致性,但是该工具会为这样的代码喷出错误: float a = foo(); float b = bar(); float c = a - b; 据
考虑 float a[] = { 0.1, 0.2, 0.3}; 我很困惑a稍后传递给函数 foo(float* A) .不应该是 float* 类型的变量指向单个浮点数,对吗?就像这里提到的tu
这可能是我一段时间以来收到的最好的错误消息,我很好奇出了什么问题。 原代码 float currElbowAngle = LeftArm ? Elbow.transform.localRotation
刚开始学习 F#,我正在尝试为 e 生成和评估泰勒级数的前 10 项。我最初编写了这段代码来计算它: let fact n = function | 0 -> 1 | _ -> [1
我已经使用 Erlang 读取二进制文件中的 4 个字节(小端)。 在尝试将二进制转换为浮点时,我一直遇到以下错误: ** exception error: bad argument in
假设我有: float a = 3 // (gdb) p/f a = 3 float b = 299792458 // (gdb) p/f b = 29979244
我每次都想在浏览器顶部修复这个框。但是右边有一些问题我不知道如何解决所以我寻求帮助。 #StickyBar #RightSideOfStickyBar { float : right ; }
我正在研究 C# 编译器并试图理解数学运算规则。 我发现在两种不同的原始类型之间使用 == 运算符时会出现难以理解的行为。 int a = 1; float b = 1.0f; Cons
假设我有: float a = 3 // (gdb) p/f a = 3 float b = 299792458 // (gdb) p/f b = 29979244
Denormals众所周知,与正常情况相比,表现严重不佳,大约是 100 倍。这经常导致 unexpected软件 problems . 我很好奇,从 CPU 架构的角度来看,为什么非规范化必须是 那
我有一个由两个 float 组成的区间,并且需要生成 20 个随机数,看起来介于两个 float 定义的区间之间。 比方说: float a = 12.49953f float b = 39.1123
我正在构建如下矩阵: QMatrix4x3 floatPos4x3 = QMatrix4x3( floatPos0.at(0), floatPos1.at(0), floatPos2.at(0),
给定归一化的浮点数f,在f之前/之后的下一个归一化浮点数是多少。 通过微动,提取尾数和指数,我得到了: next_normalized(double&){ if mantissa is n
关于 CSS“float”属性的某些东西一直让我感到困惑。为什么将“float”属性应用到您希望 float 的元素之前的元素? 为了帮助可视化我的问题,我创建了以下 jsFiddle http://
关于 CSS“float”属性的某些东西一直让我感到困惑。为什么将“float”属性应用到您希望 float 的元素之前的元素? 为了帮助可视化我的问题,我创建了以下 jsFiddle http://
我有一个新闻源/聊天框。每个条目包含两个跨度:#user 和#message。我希望#user 向左浮动,而#message 向左浮动。如果#message 导致行超过容器宽度,#message 应该
我想创建一个“记分卡”网格来输出一些数据。如果每个 div.item 中的数据都具有相同的高度,那么在每个 div.item 上留下一个简单的 float 会提供一个漂亮的均匀布局,它可以根据浏览器大
我正在学习使用 CSS float 属性。我想了解此属性的特定效果。 考虑以下简单的 HTML 元素: div1 div2 This is a paragraph 以及以下 CSS 规则: div {
我正在尝试从可以是 int 或 float 的文件中提取数据。我发现这个正则表达式将从文件 (\d+(\.\d+)?) 中提取这两种类型,但我遇到的问题是它将 float 拆分为两个。 >>> imp
我是一名优秀的程序员,十分优秀!