计算机中的数值存储方式

计算机中的数值存储方式

今天看见一个面试题,java中的常量定义int i = 0xFFFFFFFF;
一开始以为这种定义是错的,结果输出为“-1”。
温习一下大学学的知识。
计算机中存储的数值,正数为其本身,而负数存的是其补码。
而: 0xFFFFFFFF表示十六进制数,相当于二进制的
1111 1111 1111 1111 1111 1111 1111 1111 ,计算机就是存储的这一个数值,但是,我们向控制台输出的时候,计算机认为你存的是一个负数(因为以1开头),所以要输出其原码。
负数的原码变为补码过程是,
原码符号位不变,其余数字取反,然后再加一
所以补码变为源码是,先减一再把除了符号位取反。
1111 1111 1111 1111 1111 1111 1111 1111–>1111 1111 1111 1111 1111 1111 1111 1110–>1000 0000 0000 0000 0000 0000 0000 0001=-1

计算机中的数值存储方式_第1张图片
为了更好的描述,我做了测试,当我直接存储二进制数的时候,输出的也是-1,所以当存储十六进制数据的时候也是存储的1…1,在输出的时候,翻译成-1。
当然有什么问题欢迎讨论。

你可能感兴趣的:(0xffffffff)