有无符号整形加减,截断,提升等问题解析

一:整形截断问题

1.

 分析:-128 的原码是 10000000 00000000 00000000 10000000

补码是 11111111 11111111 11111111 10000000,因为是char 型,截断之后:10000000

%u 是打印无符号整数,整形提升补截断之后的符号位1:11111111 11111111 11111111 10000000

被当做无符号整数对待,即原码就为:11111111 11111111 11111111 10000000

答案:

 4294967168的二进值就是:11111111 11111111 11111111 10000000

2.

 这题与上题一样的答案,大家可以试试自己分析。

二:整形之间加减运算

 分析:a 在内存中存储的:00000000 00000000 00000000 00001010,因为是正数。

-20的原码是 10000000 00000000 00000000 00010100,

补码是 11111111 11111111 11111111 11101100,所以 b 里是补码,计算机中运算都是补码运算,将补码相加得到:11111111 11111111 11111111 11110110,%d 打印有符号整数,所以相加之后的补码变原码:10000000 00000000 00000000 00001010,所以是-10。%u打印无符号整数,所以相加之后的补码就被当作原码,直接打印。

答案:

 三:无符号与有符号整形的范围

1.

 这题是死循环,因为无符号unsigned int 永远都比 0 大

2.

 这题我们就需要找到 0 的位置,也需要了解 char 类型的范围,因为只有一个字节8个位,还有一个符号位。当是正数的时候最大为:01111111,也就是127,如果是负数的话规定 char 最小的负数就是-128,所以 char 的范围

 所以答案就是 255。

如果是无符号 unsigned char 范围是多少?

因为无符号就不存在负数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值