【发布时间】:2015-07-20 20:17:15
【问题描述】:
我正在尝试了解 codeforces 中 challenge 的第一个测试用例。
说明是:
Sergey 正在测试下一代处理器。处理器不使用字节,而是使用由 n 位组成的存储单元。这些位从 1 到 n 编号。一个整数按以下方式存储在单元格中:最低有效位存储在单元格的第一位,下一个有效位存储在第二位,依此类推;最高有效位存储在第 n 位。 现在 Sergey 想要测试以下指令:“将单元格的值加 1”。作为指令的结果,写入单元格的整数必须加一;如果结果数的某些最高有效位不适合单元格,则必须丢弃它们。 谢尔盖在单元格中写入了某些位的值,并将为其值加一。操作后单元格会改变多少位?
总结
给定一个二进制数,将其十进制值加1,计算运算后变化了多少位?
测试用例
4
1100
= 34
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,那会更有意义。 -
对不起,关于最高位和最低位的术语我没看懂,你能解释一下吗?