1

如果您有一个二进制数,例如 1010(以 10 为底的 10),是说除以二将删除第一个数字(使其最终为 010),对吗?

基本上你如何删除第一个数字(即,如果二进制数是 0 或 1,那么它最终会什么都没有)?我不想要代码或任何东西,我只想知道像你除以或乘以 2 之类的东西。

也不要考虑二进制数的任何最左边的零。

4

3 回答 3

3

它的工作方式与在十进制中的工作方式相同。没有第一个数字的数字 401 是 1。你减去了 400,不是吗?现在,要除以 10,您需要将数字向右移动。401 右移是 040。401/10 = 40。注意 1 被丢弃,因为我们正在处理整数除法。

所以在二进制中,它是完全相同的,但具有 2 的幂。删除第一位不会除以 2。它减去其位置的值。所以 101b(即 4+1 = 5),没有它的最大位,是 001b,或 1 个十进制。这是减法:5 - 4 = 1。

要除以 2,请将位向右移动,就像以 10 为基数一样。所以 101b 将变为 010b,即十进制的 2。5/2 == 2(我们删除小数部分,因为它是整数除法)

有道理?如果你曾经对二进制感到困惑,想想数字和位置是如何以十为底的,而不是十的幂,使用二的幂。

于 2013-02-10T07:56:42.027 回答
1

如果“第一个数字”的意思是“第一个有效数字”,那么您要查找的内容类似于number and not (1 shl (int(log number / log 2))), whereandnotare 位运算,shl表示左移,并且int向下舍入(从不向上)为整数。log只是一个对数,在任何基数(两种情况下的基数相同)。

如果“第一个数字”是指第 n 个位置的数字(让最右边的位置为 0,从左数),那么您只需执行number and not (1 shl position).

于 2013-02-10T07:42:12.160 回答
-1

删除一个数字就像将其更改为 0。将 1010 更改为 0010 是通过减去 1000 来完成的:1010 - 1000 = 0010。

于 2013-02-10T07:41:46.720 回答