有符号数和无符号数之间的转换

有如下程序段:

char ch=-1;
printf(“%02x,%02x”,ch,(unsigned char)ch);

则输出:

A -1,-1
B ff,ff
C ffffffff,ff
D ff,ffffffff

正确答案:C
%02x表示输出最少2位,不足补0.
第一个ch=-1,负数拓展到32位需要补1,所以是ffffffff
第二个先转换为无符号数ff(255), 正数拓展补0,由于最少输出2位,所以是ff

无符号数编码:
补码编码:

有符号数和无符号数之间的转换的规则:数值可能会改变,但是位模式不变。
强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。
printf输出数值时,分别用指示符%d、%u和%x以 有符号十进制、无符号十进制和十六进制格式输出一个数字。

扩展一个数字的位表示:
不同字长的整数之间转换,同时又保持数值不变。
从一个较小的数据类型转换到一个较大的类型:
(1)零扩展:无符号数。
(2)符号扩展:补码数字,即有符号数。

截断数字
将一个w位额数x 截断为一个k位数字时,我们会丢弃高w-k位,截断一个数字可能会改变它的值—溢出的一种形式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值