int转换为char时的截位问题

2016-09-22  本文已影响204人  b6aed1af4328

int型数据有4字节,32位,char字符型数据有1字节,8位。当较大的int型数据转换为char时,不可避免会发生截位,此文讨论的就是此现象的详细过程。

Image 2.png
Image 3.png
以上2图显示了,显示为1000的int型数据转为char型数据,最后显示为-24;-1000int型数据转换为char型为24。
1000用二进制表示为0000 0000 0000 0000 0000 0011 1110 1000
为正数,反码补码都是它本身。补码为0000 0000 0000 0000 0000 0011 1110 1000,此时数据转换而截位,截得:1110 1000
将此截得的补码还原为原码。
符号位为1,为负数,先减一还原为反码,其反码为1110 0111,再将其除符号位的其他位取反,得其原码。其原码为
1001 1000,用char型的%d表示,为-24.

-1000用二进制表示为1000 0000 0000 0000 0000 0011 1110 1000 为负数,先得其反码,反码为1111 1111 1111 1111 1111 1100 0001 0111,再加一得补码1111 1111 1111 1111 1111 1100 0001 1000,此时发生数据转换而截位,截得:0001 1000
将此截得的补码还原为原码。因符号位为0,为正数,原码反码补码都是它本身,故其原码为0001 1000,用char的%d表示,为24.

心得:截位是在补码状态下截的。
一般情况下,参与运算都是补码状态参与的。补码很重要。

上一篇下一篇

猜你喜欢

热点阅读