回复:为什么一个32位的双整型值除以100相当于左移16位

老学童

  • 帖子

    765
  • 精华

    32
  • 被关注

    64

论坛等级:奇侠

注册时间:2011-06-22

钻石 钻石 如何晋级?

发布于 2014-04-15 22:46:07

18楼

Z版,既然您处于对坛友负责,对事不对人,那我也首先申明以下问题绝对不是出于对您的不敬!
1. 十六位二进制数有‘4位BCD’吗?见西门子手册:



结论:16位二进制BCD码最大值C+/-999
2. 这段程序的目的仅仅是为了BCD到INT转换,如果您同意我的观点,那么就应该在转换完成后毫无“损失”地保存至DB80.DBW12,因此,按您和廖老师所指出的‘余数存累加器1的高位’,而不应该出现商(否则就会“损失”),这样,假定是3位BCD码,那就不能整除100,而要整除1000(否则会出现‘商’而出现“损失”),见本帖仿真图片;
结论:只可能是最大2位BCD码;
3. 因为错用了BTD,因此,如果不整除100,会将累加器的高位(=0)写入DB80.DBW12(数据块按高位到低位保存),虽然“左移16位"的说法是错的,但是客观上起到了“左移16位”的效果。
正如廖老师在1楼中指出的"这种左移动16位有点旁门左道"。
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54619条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。