【问题标题】:How can I understand the result of this testcase in this code challenge?在这个代码挑战中,我如何理解这个测试用例的结果?
【发布时间】:2015-07-20 20:17:15
【问题描述】:

我正在尝试了解 codeforces 中 challenge 的第一个测试用例。

说明是:

Sergey 正在测试下一代处理器。处理器不使用字节,而是使用由 n 位组成的存储单元。这些位从 1 到 n 编号。一个整数按以下方式存储在单元格中:最低有效位存储在单元格的第一位,下一个有效位存储在第二位,依此类推;最高有效位存储在第 n 位。 现在 Sergey 想要测试以下指令:“将单元格的值加 1”。作为指令的结果,写入单元格的整数必须加一;如果结果数的某些最高有效位不适合单元格,则必须丢弃它们。 谢尔盖在单元格中写入了某些位的值,并将为其值加一。操作后单元格会改变多少位?

总结

给定一个二进制数,将其十进制值加1,计算运算后变化了多少位?

测试用例

4

1100
= 3

4

1111
= 4

注意 在第一个样本中,单元格的值最终为 0010,在第二个样本中,值为 0000。

在 2 个测试用例中,1111 是 15,所以 15 + 1 = 16(二进制 10000),所以所有 1 的变化,因此是 4

但是在2个测试用例中1100是12,所以12 + 1 = 13(01101),这里只是最后左边的1发生了变化,结果却是3,为什么?

【问题讨论】:

  • 我认为,如果在这个有趣的处理器中,最低有效位是最左边的位,并且1100 是十进制的 3,而不是十进制的 12,那会更有意义。
  • 对不起,关于最高位和最低位的术语我没看懂,你能解释一下吗?

标签: algorithm bits


【解决方案1】:

您错过了关键部分:最低有效位是第一个(即最左边的),而不是最后一个,因为我们通常编写二进制文件。

因此,1100 不是 12 而是 3。因此,1100 + 1 = 3 + 1 = 4 = 0010,所以 3 位发生了变化。

“最低有效位”的字面意思是不是最高有效位的位,因此您可以将其理解为“代表最小值的位”。在二进制中,表示 2^0 的位是最低有效位。所以你的任务中的二进制代码是这样写的:

bit no. 0    1    2    3    4   (...)
value   2^0  2^1  2^2  2^3  2^4 (...)
        | least             | most
        | significant       | significant
        | bit               | bit

这就是为什么 1100 是:

1100 = 1 * 2^0 + 1 * 2^1 + 0*2^2 + 0*2^3 = 1 + 2 + 0 + 0 = 3

不是相反(就像我们通常写的那样)。

【讨论】:

  • 谢谢你的解释,我明白了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多