,正数原码:最高位符号位为0。
负数原码:最高位符号位为1,其余位为其对应正数的原码位。
6的原码: 0000 0110
-6的原码:1000 0110
正数反码:与原码一样。
负数反码:符号位不变,其余为取反。
6的反码: 0000 0110
-6的反码:1111 1001
正数补码: 与原码相同。
负数补码: 其反码加1。
6的补码: 0000 0110
-6的补码: 1111 1010
方法1:符号位不变,取反再加1。
方法1:符号位不变,减1再取反。
方法‚2:符合位不变,取反再加1。
题目1:十进制数-10的3进制4位数补码?
解析:
方法1:对于一个8位的二进制负数a,有:|a|的原码+a的补码=1 0000 0000。所以有a的补码=1 0000 0000 - |a|的原码。同理,对于4位的三进制负数,同样有该性质。故-10的4位三进制补码=1 0000-10的4位三进制原码即为1 0000-0101=2122。
方法2:按定义来,即原码取反加1,-10的三进制原码中的符号位为多少呢?,我们知道二进制中,负数符号位为1,那么三进制中,负数的符号位就为2。所以-10的三进制原码为2101,好,然后符号位不变,其他位按三进制取反,那0,1,2按三进制取反为多少呢?,我们知道3进制数,每位最大只能为2,那么必须保证a+a的反=2,所以0取反为2,1取反为1,2取反为0。所以2101的反码为2121,然后再加1,即为2122就是-10的4位三进制补码。
题目2:十进制数-10的:4进制3位数补码?
方法1:首先求10的4进制3位原码为022,然后用1000-022 = 312即为所求。
方法2:-10的4进制3原码为322,然后其反码为311,再加1,即为312。
计算机中所有数据都以补码的形式存储。
#include <stdio.h>
void main(int argc,char* argv[])
{
char a = 500;
printf("%d\n",a);
getchar();
}
输出a的值为多少呢?
首先我们计算500的二进制补码,为1 1111 0100共9位,而char类型占一个字节,所以截取低8位,所以a的补码为1111 0100,又因为a是有符号数,最高位为1,为负数,其原码为1000 1100,所以输出a的值为-12。