关于BIN2DEC函数处理10位首位为1的二进制数的异常咨询
关于BIN2DEC函数10位首位为1时返回负数的原因
这是因为Excel的BIN2DEC函数是按有符号10位二进制补码来解析输入的:
- 函数默认把输入的二进制数当作10位有符号数处理,首位是符号位:
0代表正数,1代表负数。 - 当输入是9位及以下的二进制数时,函数会自动在高位补
0凑满10位,此时符号位为0,所以会按正数解析,结果正常。
拿你的例子拆解:
- 对于
1010111110(10位):- 首位
1标记这是负数,剩下的9位是010111110 - 补码转十进制的规则是:对剩余位取反(得到
101000001)再加1(得到101000010),转十进制是322,最终结果就是-322
- 首位
- 对于
101011110(9位):- 函数自动补
0成10位:0101011110,首位0是正数符号位,直接转十进制就是350,和预期一致
- 函数自动补
如果要得到10位首位为1的二进制数的无符号十进制结果,你可以用公式手动计算,比如:=SUMPRODUCT(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*2^(LEN(A1)-ROW(INDIRECT("1:"&LEN(A1))))),把A1换成你的二进制数所在单元格。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

