负数的表示,一般使用的是补码。
二进制
1111 1111 1111 1111
十六进制
0xFFFF
前面说到了用补码来表示负数,那么什么是补码呢?
子啊二进制中负数的表示曾经有两种思路:
用既定的存储空间中的第一位表示正负号,1代表负,0代表正,以16位为例:
-1就表示为
1000 0000 0000 0001
这里第一位的1表示这个数字是负的
1在这里的表示为
0000 0000 0000 0001
这样带来的一个问题就是,这种存储方式不方便运算。
比如加法
-1+1的结果本来应该是0
以这种方式的计算结果是什么呢?
1000 0000 0000 0001
+
0000 0000 0000 0001
——————————
1000 0000 0000 0010
在这种表示方法下就变成-2了。。。
为了解决这种问题,我们就开始使用补码来表示负数。
要想理解补码,首先得知道什么是反码。
简单点说,反码就是把原码的每一个0都换成1,每个1都换成0.
那么1二进制为:
0000 0000 0000 0001
的反码就应该是
1111 1111 1111 1110
所谓补码呢,就是在反码的基础上+1
这样就成为了
1111 1111 1111 1111
我们再来加一下试试看
1111 1111 1111 1111 即 -1
+
0000 0000 0000 0001 即1
——————————
0000 0000 0000 0000
这样就得到了正确的结果,0。
其他的负数表示方法也跟这个相同。
记住,这样表示数字时,以16位为例,其范围为:
-32768~32767
也就是参数类型中所说的Sign。
现在你应该就能理解为什么许多游戏中,数值溢出是突然变成一个特别小的负数的原因了吧!
至于十六进制,只需要简单地把二进制数转为十六进制就好了!
如有其它问题欢迎追问,望采纳!
16位即:两个8位
负数最高位就是最左边为1,正数为0
内存里面表示负数都是以补码的形式存在的所以-1在内存中
二进制的表现形式为:1111 1111-1111 1111
16进制为:0xFFFF
16位,即2个字节。-1的16进制为FFFF,二进制为1111 1111 1111 1111
饮用寥凶 tangziz786