找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4053|回复: 14
收起左侧

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

  [复制链接]
ID:100982 发表于 2022-7-24 11:44 | 显示全部楼层 |阅读模式
两段程序
一段是        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;

为什么结果截然不同啊
回复

使用道具 举报

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 | 显示全部楼层
先取整再除,不同于先除再取整。
回复

使用道具 举报

ID:824490 发表于 2022-7-24 14:16 | 显示全部楼层
  integer /=10;==>  integer= integer /10; //简单地说,就是integer缩小10倍。
回复

使用道具 举报

ID:121859 发表于 2022-7-24 14:38 | 显示全部楼层
结果肯定应该一样的,如果是仿真结果
111.png
回复

使用道具 举报

ID:638524 发表于 2022-7-24 15:59 | 显示全部楼层
作者为什么不出来回复,或者说详细下,那里结果不一样了
回复

使用道具 举报

ID:963677 发表于 2022-7-24 16:00 | 显示全部楼层
执行先后顺序不同,第一个是先取余再除,第二个是先除再取余,这样的结果当然不同
回复

使用道具 举报

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;
欢迎指正!                                    
回复

使用道具 举报

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

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

使用道具 举报

ID:100982 发表于 2022-7-25 07:51 | 显示全部楼层
liaojiaao 发表于 2022-7-24 15:59
作者为什么不出来回复,或者说详细下,那里结果不一样了

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

使用道具 举报

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的值不同
回复

使用道具 举报

ID:277550 发表于 2022-7-25 12:44 | 显示全部楼层

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


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

使用道具 举报

ID:100982 发表于 2022-7-25 14:37 | 显示全部楼层
devcang 发表于 2022-7-25 12:44
整数相除,按整数计算,每一步,都“会”四舍五入。。。。。。

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

使用道具 举报

ID:883242 发表于 2022-7-25 17:55 | 显示全部楼层
devcang 发表于 2022-7-25 12:44
整数相除,按整数计算,每一步,都“会”四舍五入。。。。。。

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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