关于不同数据类型打印-1值的理解

一般情况下找到合适的例子能够非常有助于我们理解问题
其实本来想在他问题下面回复的,但是帖子太久远~ 已经不支持了回复功能- -!!哈哈。

一、这个是关于不同数据类型打印值不同的问题


int main(void)
{
	unsigned char a = -1;
	unsigned short b = -1;
	unsigned int c =-1;
	
	printf("a = %d\n", a);//255
	printf("b = %d\n", b);//65535
	printf("c = %d\n", c);//-1
	
	return 0;
}

那这里为什么a和b打印的都是整型值,而c是-1呢。

首先,理解这个问题要深入理解一个概念

%d的打印形式是32位有符号整形

举个例子吧,比如你的系统是32位的,那么int型可以支持0xFFFFFFFF这么大的数,但是%d能打印出来的整数就是在4294967295/2 也就是正整数的2,147,483,647~负整数2,147,483,647之间。所以当你打印c = -1时,也就是最大值4 294 967 295不会正常显示正整数,会显示-1,因为溢出了。经过试验得出使用%d打印4 294 967 295-1 得出的值会是-2哦,而a和b是整形值是因为%d是打印 [00000000 00000000 00000000 00000000] 32位,而前面a和b一个是1字节一个是2字节,没有超过%d能打印的正整数,所以-1最后通过%d 32位的转换变成了
a = 00000000 00000000 00000000 11111111
b = 00000000 00000000 111111111 11111111

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值