Algorithm 在这个代码挑战中,我如何理解这个测试用例的结果?

Algorithm 在这个代码挑战中,我如何理解这个测试用例的结果?,algorithm,bits,Algorithm,Bits,我试图理解codeforces中的第一个测试用例 说明如下: 谢尔盖正在测试下一代处理器。处理器不使用字节,而是使用由n位组成的内存单元。这些位从1到n进行编号。整数以如下方式存储在单元中:最低有效位存储在单元的第一位,下一有效位存储在第二位,依此类推;最高有效位存储在第n位。 现在Sergey想测试以下指令:“将单元格的值加1”。作为指令的结果,写入单元中的整数必须增加1;如果结果数字的某些最重要位不适合单元格,则必须丢弃它们。 谢尔盖写了一些值​​计算单元中的位,并将其值加一。操作后,单元的

我试图理解codeforces中的第一个测试用例

说明如下:

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

摘要

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

测试用例

四,

1100
=3

四,

1111
=4

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

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


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

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

因此,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

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

我认为在这个有趣的处理器中,如果最低有效位是最左边的,并且
1100
是3位小数,而不是12位小数,那就更有意义了。很抱歉,我不理解关于最高有效位和最低有效位的术语,你能解释更多吗?谢谢你的解释,我现在明白了