int i= 32 //这是一个十进制数的表示,就是32
int i = 032//这是一个八进制数的表示,3*8+2=26
类似还有十六进制表示(0x开头),二进制表示(0b开头)int i = 032//这是一个八进制数的表示,3*8+2=26
开始几个是标识,要换算成二进制的话需要先舍弃标识。然后一位相当于3位,首位要特别处理(毕竟一个八进制表示的数不好用2进制表示,区分不开)。
八进制的一位是二进制的3位,3又不是32的约数。
然后表示负数的方法是使用补码(似乎是这个说法,请查证)的方式。
所有位均为0,表示0;
第一位为0表示正数,规则同一般的二进制表示,
负数的标识的第一位为0,但对值的约定就和正数不同,是其相反数先-1,然后按位取非(~)
为什么这样,大概是因为整数的个数是奇数(0的相反数是其本身,无需再表示),然后-1然后按位取非这个运算比较快。逆运算也快。
这样设定的话,一个数和其相反数按位操作就有一些比较有意思的结果。
一个数与其相反数按位与(&)结果为正数,按位或(|)结果为负数。
因为0的特比占用,导致负数的个数比整数的个数多1
[此贴子已经被作者于2019-4-25 16:17编辑过]