假设我们使用8位二进制来表示整数,在这个例子中,我们将关注正数9和负数-9的表示形式。
原码(正数):
正数9的原码是二进制表示的本身,即0000 1001。
原码(负数):
负数-9的原码是将绝对值9的二进制表示形式前面加上符号位1,即1000 1001。
反码(负数):
负数-9的反码是将原码中除符号位以外的每一位取反。
对于负数-9,符号位是1,其他位取反后为0111 0110。
补码(负数):
负数-9的补码是将反码加1。
对于负数-9,反码是0111 0110,加1后得到补码0111 0111。
在计算机中,正数和负数的存储方式是不同的。正数直接使用原码表示,而负数使用补码表示。这种表示方式使得计算机可以更方便地进行加减运算。
如果我们要将负数-9与正数9相加,我们可以按照补码的方式进行计算:
0000 1001 (正数9的原码)
+ 1111 0111 (负数-9的补码)
------------
0000 0000 (结果为0)
注意,最终的结果是0,这是因为正数9和负数-9的补码相加等于0。
# include <stdio.h>
int main()
{
printf("%x\n",-9);
return 0;
}
/*
-9 是int类型在内存的地址是4字节
源码:1000 0000 0000 0000 0000 0000 0000 1001
反码:1111 1111 1111 1111 1111 1111 1111 0110
补码:1111 1111 1111 1111 1111 1111 1111 0111
16进制:ff ff ff f7
*/
通过这个例子,希望你能更好地理解原码、反码和补码之间的关系,以及它们在计算机中表示整数的方式。