日期:2014-05-20  浏览次数:20638 次

关于十进制和八进制的问题
“十进制字面常量具有一个很好的属性,即所有的十进制字面常量都是正的,而十六进制或是八进制字面常量并不具备这个属性”


怎么理解呢

------解决方案--------------------
十进制的一个数 100,一定是正的,除非写成 -100。但是十六进,比如0xf0000000,和八进制,比如025776543212。他们表面上没负号,但是符号位都是1,所以他们实际上是负数。
------解决方案--------------------
这个说法,其实我个人觉得要看场合。

原文是说:
十进制字面常量只有一个特性,即所有的十进制字面常量都是正数,如果想写一个负的十进制,则需要在正的十进制字面常量前加上“-”即可。
 
十六进制或八进制字面常量可就不一定是正数或负数,是正还是负,则要根据当前情况看:如果十六进制和八进制字面常量的最高位被设置成了1,那么它们就是负数。


实际上说的是计算机在处理数值是,最高位(bit)作为了符号位的问题。

但其实 - 号,计算机也不能直接处理,所以即便是十进制实际处理时仍然用的是将最高位当作符号位的方式。
反之,程序语言处理都比较智能了,所以写代码的时候也能这样:
int a = -0x1A; // 即 负26