补码,原码,反码

补码:电脑32位

十进制转二进制(以十六进制输出)

#include <stdio.h>

int main(void)

{

int i;

i = -11;

printf("%#X\n",i);

return 0;

}

结果为0XFFFFFFF5

1.求正整数的二进制码

除2取余,直至商为零,余数倒数排序

2.求负整数的二进制码

除2取余,然后将所有位取反,末尾加1,左边补1

例:以上代码

-11先转换为二进制,再以16进制输出

(11)D=(1011)B

取反:0100 ——>末尾加1 (0101)B=(5)X

计算机是32位,所以十六进制为0xFFFFFFF5,四位为一组

__________________________________________________________________

已知二进制转十进制

如果首位为0,则表明是正整数,按普通方法来求

如果首位是1,则表明是负整数,所有位取反加1,所得数字就是该负数的绝对值(符号位不变,其余各位取反,最后+1)

#include <stdio.h>

int main(void)

{

int i;

i = 0xFFFFFFEF;

printf("%d\n",i);

return 0;

}

结果是-17

二进制是11101111转成16进制0xFFFFFFEF

11101111取反加一为(00010001)B=(11)X=(17)D=-17

步骤二进制取反+1转换为十六进制再转换10进制加负号

负数的补码的求法是反码+1


1. 原码

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如:如果是8位二进制:

[+1]原= 0000 0001

[-1]原= 1000 0001

第一位是符号位,因为第一位是符号位,所以8位二进制数的取值范围就是:(即第一位不表示值,只表示正负。)

[1111 1111 , 0111 1111]

即[-127 , 127]

2. 反码

反码的表示方法是:

正数的反码是其本身;

负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

[+1] = [0000 0001]原= [0000 0001]反

[-1] = [1000 0001]原= [1111 1110]反

我是看这个知乎的,里面更详细,原码和反码是引用这位博主讲的比较清晰,转送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值