我试图理解代码中challenge的第一个测试用例。
描述如下:
谢尔盖正在测试下一代处理器。处理器使用由n位组成的存储器单元而不是字节。这些位从1到n编号。整数以下列方式存储在单元中:最低有效位存储在单元的第一位,下一有效位存储在第二位,依此类推;最高有效位存储在第n位。 现在谢尔盖想要测试以下指令:“将单元格的值加1”。作为指令的结果,写入单元格的整数必须增加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为什么?
答案 0 :(得分:2)
你错过了关键部分:最低位是第一个(即最左边的一个),而不是最后一个,因为我们通常写二进制。
因此,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
不是反过来(正如我们经常写的那样)。