听!布鲁布鲁,大鱼又在那叨叨了

123 vs 0123 vs 0x123

问一个问题,123==0123==0x123

问题

第一次看到这个问题的时候,基本上是不假思索地给出了前一个等号成立而后一个不成立的结论。但是答案却是它们都是错的,这三个数各不相等!不信?那就自己试试吧。

如果你真的去尝试了,会发现123还是123,但是0123会等于83,0x123等于291。当然,第一个和最后一个(16进制)我们不会有什么疑问,但是第二个真的令人费解。猜测一下,为什么。

下面公布答案:

1
2
3
4
5
123 = 1*10*10 + 2*10 + 3 = 123

0123 = 1*8*8 + 2*8 + 3 = 83

0x123 = 1*16*16 + 2*16 + 3 = 291

看见了吧,原因在于他们属于不同的进制。

可是为什么0123=83 ,被认定为八进制呢?这跟常理不合啊,还有,八进制不是用o么,怎么是零?

解释

实际上,都可以,0和o长得很像,容易被混淆,况且一般也不会有人在写十进制的时候加上前导零,索性就都定义为八进制。

看来,什么事都不能想当然,还是要多学,多实践才行啊。