谁能帮我详细解释一下这个强制转型的过程?

2019-08-23 16:39发布

因为程序中碰到一个强制转型的代码,然后自己测试了一行代码,printf("%d",(short)65500);,即打印出整形65500强制转化为有符号短整形的数值,最后打印出是-36,谁能帮我解释一下他是怎么转化的,为什么最后是-36?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
rindy
1楼-- · 2019-08-23 21:15
本帖最后由 rindy 于 2017-3-27 11:05 编辑

自己解答一下看看对不对(有参考网上):
先反推一下:
36的补码(一个正数的补码是此数的二进制形式)是 0000 0000 0010 0100
按位取反:1111 1111 1101 1011
再加1(-36的补码)1111 1111 1101 1100 转化为十进制是65500

short短整形的范围是-32768~ 32767,当把65500转化为short的时候
65500=32767+32733=(32767+1)+32732=-32768+32732=-36(刚好验证正确)
不知道这样是不是对的
weiqsfj
2楼-- · 2019-08-24 02:05
没错呀   转为有符号了
rindy
3楼-- · 2019-08-24 02:22
weiqsfj 发表于 2017-3-27 10:23
没错呀   转为有符号了

中间过程是怎么样的,就是怎么变为-36的
rindy
4楼-- · 2019-08-24 04:54
 精彩回答 2  元偷偷看……

一周热门 更多>