TheBinaryKit

二进制乘法:精确乘积、移位部分积与校验

使用二进制乘法工具,检查每个乘数位的移位贡献,精确计算正负整数,核对完整乘积及十进制、十六进制结果。

输入数值

载入示例

计算在浏览器内完成,不会把输入发送给转换API。

计算结果

1000010
十进制校验
66
十六进制
42

计算步骤

  1. 1. 0 × 1011 × 2^0 = 0
  2. 2. 1 × 1011 × 2^1 = 10110
  3. 3. 1 × 1011 × 2^2 = 101100

怎样用二进制乘法工具核对完整乘积

二进制乘法可以同时核验最终答案和每个乘数位的贡献。输入两个整数计算后,页面显示完整积与两种进制校验。默认二进制乘法示例将1011乘110,得到1000010,并列出对应的移位部分积。

二进制乘法输入可用空格和下划线分组,开头允许一个正号或负号。修改任一操作数后,旧结果会立即清除,重新计算才显示当前两数的答案,避免把新输入与旧结果配在一起。清空按钮移除两个操作数,复制按钮复制二进制主结果。

二进制乘法在浏览器内使用精确整数运算,避免经由浮点中间值丢失低位。记录结果时建议保留各字段的进制标签,因为十六进制输出中的纯数字不一定与它的十进制读法相同。

把每个乘数位理解为带位权的贡献

二进制乘法中,0贡献0,1贡献被乘数本身,真正决定每行大小的是位置。第k位为1,就加入左移k位的被乘数。检查二进制乘法时,既要核对复制的数字,也要核对它位于哪一列。

二进制乘法从乘数右端依次赋予1、2、4、8等二次幂权重。第k位为1,就贡献一个左移k位的被乘数,相当于把它乘以2的k次方。把所有贡献相加得到完整乘积。

二进制乘法中的0虽然不增加数量,却保留位置;删去它会改变后续部分积的位权。这与十进制竖式乘法的位值原理相同,只是每个单独数字的乘法不再需要复杂乘法表。理解每行的起始列,比单纯记忆“后面补零”更可靠,也便于在遇到负号或较长输入时继续核对。

二进制乘法示例:1011乘110得到1000010

对1011和110进行二进制乘法,可先确认它们为十进制11与6,预期完整积为66。然后从乘数右侧依次读取,得到零行、一次左移和两次左移。这样能把二进制乘法的逐位推导与数量核验相互对照。

这个二进制乘法例子的最低位为0,首先产生零部分积。下一位是权重为2的1,所以贡献10110,也就是1011左移一位,等于十进制22。最后一位是权重为4的1,贡献101100,等于十进制44。把非零行对齐后相加,0010110加0101100得到1000010。

完整二进制乘法结果的十进制检查为66,与11乘6一致,十六进制则为42。页面的过程列表把每一个乘数位、移位权重与对应部分积写成独立等式,便于抄到纸上逐列对齐。请注意部分积按照从最低位到最高位产生,不能把列表的行号误认为从左侧开始的位编号;位置零属于乘数最右侧。

先对齐部分积,再检查相加时的进位

二进制乘法的最后阶段是求和,而不是按文本顺序拼接各行。对齐有效位之后,重叠贡献要按规则进位。排查二进制乘法的手算差异时,可以分开检查移位和累加,定位错误发生的阶段。

二进制乘法累加时,1加1写0并向左进1,三个1相加则写1并向左进1。比如11乘11会产生11和110两行,对齐相加后得到1001,也就是十进制9。若手写结果不同,可以先检查每一行有没有正确复制被乘数,再检查移位列数,最后检查累加时的进位。

二进制乘法的加法阶段也可以借助站内二进制加法页单独验证。本页展示部分积及其数值贡献,并不声称把全部加法进位都做成逐帧动画。为了保持过程可核对,即使某一行是0也会保留它,避免乘数位序在展示中悄悄缩短。

完整乘积不会为了适配输入位宽而舍去高位。

二进制乘法符号:数学负数与固定宽度补码

本页二进制乘法把负号解释为普通数学符号,先求绝对值部分积,再应用正负规则。它不根据输入长度推断字长,也不直接模拟补码乘法器。将二进制乘法结果与硬件比较前,应明确双方的数值表示。

有符号二进制乘法中,-101乘11得到-1111,即十进制负15。部分积展示的是绝对值计算,所以负号在各行求和后应用到最终结果。这不是直接模拟补码乘法器。

将二进制乘法用于固定字长电路时,还要明确符号扩展、完整双倍位宽乘积或局部结果的保存规则。不能把屏幕上带减号的数学答案直接当作寄存器中的实际位模式。若输入最高位为1但没有减号,本工具把它视为正整数的一位,而不会自动解释为符号位。

需要补码语义时,应当先明确所使用的表示规则。

核验长整数、零和有效输入范围

长整数二进制乘法应保留全部合法有效位,不先转浮点数近似计算。主结果为完整整数,辅助字段提供不同进制的校验。二进制乘法的输入上限控制处理规模,而不是截取低位答案的隐含规则。

二进制乘法的每个输入最多256个字符,分组符号也计入限制。前导零不改变数值,因此不会原样保留在标准化的数字结果中。乘以0得到0,乘以1得到另一个操作数及其正确数学符号。小数、分数、科学计数法、0b前缀,以及0和1以外的数据数字都会被拒绝。

二进制乘法的十进制字段便于检查数量级,十六进制字段便于紧凑记录,但两者都不隐含八位或十六位字长。若实际系统会发生截断,应先得到这里的完整答案,再按照系统明确的位宽规则另行分析,不能把计算正确和硬件存储正确混为同一件事。

常见问题

二进制乘法会保留完整的结果位数吗?

二进制乘法不会为了适应某个输入宽度而舍弃高位。两个非负数分别有m、n个有效位时,完整乘积最多需要m加n位。若设备仅保存部分结果,应先核对这里的完整答案,再根据设备明确的字长与溢出策略分析实际寄存器值。

为什么二进制乘法保留等于零的部分积?

二进制乘法的每一行对应乘数中的一个位与它的位置。0没有数量贡献,却决定后续行左移多少位,保留零行能明确展示这种关系。删除实际输入里的0会改变乘数本身,不能把简化显示和修改数值当作同一件事。

交换两个操作数,结果与过程会怎样变化?

二进制乘法的完整积不变,因为整数乘法满足交换律。过程列表可以不同,第二个操作数决定乘数位以及各行的位移。换序计算能核验同一数量,但无需要求两份解释长度一致或逐行相同,应判断各自贡献是否得到相同的完整答案。

只含数字的十六进制二进制乘法结果怎么读取?

二进制乘法的十六进制字段仍须保留进制标签。42在这里表示四个16加2,也就是十进制66,并不是十进制42。默认例子的1000010、66与42是同一个乘积的不同表示,不应把三个字段一律按十进制解释。