C语言中几种数值的打印结果(在计算机中的储存形式)

假设机器是32位的,分析以下代码的输出结果:

printf("%d\n", -1);						//-1
printf("%u\n", -1);						//1^32 - 1		
printf("%d\n", (char)-1);				//-1	
printf("%u\n", (char)-1);				//1^32 - 1
printf("%d\n", 255);					//255		
printf("%d\n", (char)255);		   	   	//-1	
printf("%u\n", (char)255);		        //1^32 - 1

1、 -1的原码:1000 0000 0000 0000 0000 0000 0000 0001
反码:1111 1111 1111 1111 1111 1111 1111 1110
补码:1111 1111 1111 1111 1111 1111 1111 1111(储存形式)

2、当-1的补码被当做无符号类型打印时,数值为1的32次方减一。

3、由①有——当-1被当做char来看,补码:1111 1111 (储存形式)
反码:1111 1110
原码:1000 0001

4、同②,无符号类型打印结果为1的八次方减一;
当char类型被无符号类型打印时,由于char是带符号类型,因此对char进行符号扩展,高位补1,因此结果为1111 1111 1111 1111 1111 1111 1111 1111
因此打印结果也是1的32次方减一。

5、(int)255 原码:0000 0000 0000 0000 0000 0000 1111 1111
补码为其本身;

6、由⑤可知:255做char看时,其储存形式为 1111 1111
同③,int类型打印结果为-1;

7、同④,无符号类型打印结果为1的32次方减一;

关于[符号扩展]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值