找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5243|回复: 14
打印 上一主题 下一主题
收起左侧

求为一个/与%的C语言程序问题

  [复制链接]
跳转到指定楼层
楼主
两段程序
一段是        for(i = 0;i < 4; i++)
        {
                buf[ i] = integer % 10;
                integer /=10;
        }

一段是        buf[0] = integer%10;
                buf[1] = (integer/10)%10;
                 buf[2] = (integer/100)%10;
                buf[3] = (integer/1000)%10;

为什么结果截然不同啊
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:526108 发表于 2022-7-24 13:07 | 只看该作者
你的程序逻辑不一样啊
回复

使用道具 举报

板凳
ID:213173 发表于 2022-7-24 13:36 | 只看该作者
两段程序把变量integer分解保存在数组buf[ ]的结果是一样的,但前者在运行后integer的值已改变,后者的integer值不变。前者比后者运行效率高许多。可按不同应用场景选用。
回复

使用道具 举报

地板
ID:94031 发表于 2022-7-24 14:05 | 只看该作者
先取整再除,不同于先除再取整。
回复

使用道具 举报

5#
ID:824490 发表于 2022-7-24 14:16 | 只看该作者
  integer /=10;==>  integer= integer /10; //简单地说,就是integer缩小10倍。
回复

使用道具 举报

6#
ID:121859 发表于 2022-7-24 14:38 | 只看该作者
结果肯定应该一样的,如果是仿真结果

111.png (38.4 KB, 下载次数: 99)

111.png
回复

使用道具 举报

7#
ID:638524 发表于 2022-7-24 15:59 | 只看该作者
作者为什么不出来回复,或者说详细下,那里结果不一样了
回复

使用道具 举报

8#
ID:963677 发表于 2022-7-24 16:00 | 只看该作者
执行先后顺序不同,第一个是先取余再除,第二个是先除再取余,这样的结果当然不同
回复

使用道具 举报

9#
ID:1040182 发表于 2022-7-24 22:48 | 只看该作者
假设这个数是123,第一种方法:i=0 buf[0]=213%10=3,integer=213/10=21
                                          i=1,buf[1]=21%10=1,integer=21/10=2
                                          i=2,buf[2]=2%10=2,integer=2/10=0
                          第二种方法:buf[0] = integer%10=213%10=3;
                                           buf[1] = (integer/10)%10=21%10=1;
                                           buf[2] = (integer/100)%10=2%10=2;
欢迎指正!                                    
回复

使用道具 举报

10#
ID:100982 发表于 2022-7-25 07:50 | 只看该作者
wulin 发表于 2022-7-24 13:36
两段程序把变量integer分解保存在数组buf[ ]的结果是一样的,但前者在运行后integer的值已改变,后者的inte ...

谢谢,我已经找到问题所在了,integer的值是在中断中改变的,所以用第一个改变了integer的值导致下次再用这个变量出了问题,不过您的回答我又个疑问,为什么第一个比第二个效率高很多?
回复

使用道具 举报

11#
ID:100982 发表于 2022-7-25 07:51 | 只看该作者
liaojiaao 发表于 2022-7-24 15:59
作者为什么不出来回复,或者说详细下,那里结果不一样了

我没写全,integer的值是在中断中改变的,所以这里虽然buf值一样,但是integer的值改变了。
回复

使用道具 举报

12#
ID:100982 发表于 2022-7-25 07:52 | 只看该作者
sadadasddas2 发表于 2022-7-24 22:48
假设这个数是123,第一种方法:i=0 buf[0]=213%10=3,integer=213/10=21
                                   ...

没有问题,只是integer的值不同
回复

使用道具 举报

13#
ID:277550 发表于 2022-7-25 12:44 | 只看该作者

整数相除,按整数计算,每一步,都“会”四舍五入。。。。。。


不用循环的,比较正确。
回复

使用道具 举报

14#
ID:100982 发表于 2022-7-25 14:37 | 只看该作者
devcang 发表于 2022-7-25 12:44
整数相除,按整数计算,每一步,都“会”四舍五入。。。。。。

你这个理解有问题吧,不会四舍五入的。
回复

使用道具 举报

15#
ID:883242 发表于 2022-7-25 17:55 | 只看该作者
devcang 发表于 2022-7-25 12:44
整数相除,按整数计算,每一步,都“会”四舍五入。。。。。。

整数运算只会截断,不存在四舍五入。
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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