补码的探索

正数的补码是原码,负数的补码是反码加一。正数的反码是原码,负数的反码是原码符号位不变,其它位反转。

以下实验环境为VS2010

unsigned int a = -10;

printf("0x%x", ~a);

输出:0x9

解释:当给无符号型a赋负值时,a自动变为有符号数,a在机器中的存在形式为0x80 00 00 0a的补码形式,即0xff ff ff f6。按位取反(包括符号位)变为0x00 00 00 09。


unsigned int b = -10;
printf("0x%x", b);//显示补码

输出:0xff ff ff f6


char c = -127;
printf("0x%x", c);

输出:0xff ff ff 81

解释:虽然是char型,但在32为系统中还是按照32位数据进行处理的,即-127的原码为0x80 00 00 7f,反码为0xff ff ff 80,补码为0xff ff ff 81。


char d = -128;
printf("0x%x", d);

输出:0xff ff ff 80

解释:int型-128的原码0x80 00 00 80,反码0xff ff ff 7f,补码0xff ff ff 80,与char型相同。


综上:计算机以补码的形式进行存储显示。可以将char型完全当成int型。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值