补码问题

来源:互联网 发布:郑州淘宝加盟判刑 编辑:程序博客网 时间:2024/04/28 15:50

,正数原码:最高位符号位为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十进制数-103进制4位数补码

解析:

方法1对于一个8位的二进制负数a,有:|a|的原码+a的补码=1 0000 0000。所以有a的补码=1 0000 0000 - |a|的原码。同理,对于4位的三进制负数,同样有该性质。故-104位三进制补码=1 0000-104位三进制原码即为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就是-104位三进制补码。

题目2十进制数-10:4进制3位数补码?

方法1:首先求104进制3位原码为022,然后用1000-022 = 312即为所求。

方法2-104进制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 01009位,而char类型占一个字节,所以截取低8位,所以a的补码为1111 0100,又因为a是有符号数,最高位为1,为负数,其原码为1000 1100,所以输出a的值为-12

原创粉丝点击