在计算机中,16进制是常用的数字表示方式之一,它使用16个数字来表示数值,包括0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中,A~F表示的数值分别是10~15,它们分别对应于二进制的1010~1111。在16进制中,每一位数字所表示的二进制数都是4个(也就是说,4个二进制位对应一个16进制数)。
计算机中的数据量很大,使用二进制表示很繁琐,而使用16进制可以大大简化数据表示。因此,在计算机领域中,16进制很常用。在打印16进制数时,我们经常看到高位都是1的情况,这是为什么呢?
在16进制中,最高位数字的权值最大,可以表示的数值最大。此处最高位是 8 个二进制位,其权值是 2^7,也就是 128。当这个最高位为1时,它代表的是一个负数,这个负数的绝对值等于剩余位表示的数值减去 128。例如,11111111表示的是-1,经过计算可知,它是128-1。
当我们想要打印一些16进制的负数时,它们的符号位都是1,这是因为它们的最高位都是1,而这些16进制数都被解释为负数,所以高位都是1。
在计算机中,负数使用的是补码表示法。补码是一种用来表示负整数的二进制编码方法,也是计算机中常用的一种整数表示法,它解决了负数的加减法问题。在补码表示法中,需要将正数的补码按位取反,并加一得到负数的补码。例如,1的补码是0001,那么-1的补码就是1111(将0001按位取反得到1110,再加1得到1111)。
因此,当我们打印16进制的负数时,实际上是在打印它们的补码。补码中最高位都是1,这也就是为什么打印出来的结果高位全是1的原因。