Algorithm 在这个代码挑战中,我如何理解这个测试用例的结果?
我试图理解codeforces中的第一个测试用例 说明如下: 谢尔盖正在测试下一代处理器。处理器不使用字节,而是使用由n位组成的内存单元。这些位从1到n进行编号。整数以如下方式存储在单元中:最低有效位存储在单元的第一位,下一有效位存储在第二位,依此类推;最高有效位存储在第n位。 现在Sergey想测试以下指令:“将单元格的值加1”。作为指令的结果,写入单元中的整数必须增加1;如果结果数字的某些最重要位不适合单元格,则必须丢弃它们。 谢尔盖写了一些值计算单元中的位,并将其值加一。操作后,单元的多少位将发生变化 摘要 给定一个二进制数,将其十进制值加1,计算运算后有多少位发生变化 测试用例 四, 1100Algorithm 在这个代码挑战中,我如何理解这个测试用例的结果?,algorithm,bits,Algorithm,Bits,我试图理解codeforces中的第一个测试用例 说明如下: 谢尔盖正在测试下一代处理器。处理器不使用字节,而是使用由n位组成的内存单元。这些位从1到n进行编号。整数以如下方式存储在单元中:最低有效位存储在单元的第一位,下一有效位存储在第二位,依此类推;最高有效位存储在第n位。 现在Sergey想测试以下指令:“将单元格的值加1”。作为指令的结果,写入单元中的整数必须增加1;如果结果数字的某些最重要位不适合单元格,则必须丢弃它们。 谢尔盖写了一些值计算单元中的位,并将其值加一。操作后,单元的
=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位小数,那就更有意义了。很抱歉,我不理解关于最高有效位和最低有效位的术语,你能解释更多吗?谢谢你的解释,我现在明白了