OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2581|回复: 4

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

[复制链接]

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2017-3-27 10:19:05 | 显示全部楼层 |阅读模式
1金钱
因为程序中碰到一个强制转型的代码,然后自己测试了一行代码,printf("%d",(short)65500);,即打印出整形65500强制转化为有符号短整形的数值,最后打印出是-36,谁能帮我解释一下他是怎么转化的,为什么最后是-36?

最佳答案

查看完整内容[请看2#楼]

自己解答一下看看对不对(有参考网上): 先反推一下: 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(刚好验证正确) 不知道这样是不是对的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
 楼主| 发表于 2017-3-27 10:19:06 | 显示全部楼层
本帖最后由 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(刚好验证正确)
不知道这样是不是对的
回复

使用道具 举报

2

主题

43

帖子

0

精华

高级会员

Rank: 4

积分
713
金钱
713
注册时间
2012-6-26
在线时间
266 小时
发表于 2017-3-27 10:23:23 | 显示全部楼层
没错呀   转为有符号了
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
 楼主| 发表于 2017-3-27 10:33:20 | 显示全部楼层
weiqsfj 发表于 2017-3-27 10:23
没错呀   转为有符号了

中间过程是怎么样的,就是怎么变为-36的
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
 楼主| 发表于 2017-3-27 11:21:58 | 显示全部楼层
yklstudent 发表于 2017-3-27 11:01
这问题问的,找本C语言数据看看

看了                       
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-22 22:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表