找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这串C语言代码能不能在优化一下?

[复制链接]
ID:278457 发表于 2024-10-4 02:39 | 显示全部楼层 |阅读模式
谢谢大虾
1.png
回复

使用道具 举报

ID:1109793 发表于 2024-10-4 14:26 | 显示全部楼层
BCD码放数组里面,然后弄个函数,把数组地址和数据传进去,里面用一个循环搞定,这样应该简化不少吧。
大概类似这种代码编译器好像也可以帮你简化。就是实际上出来的HEX并不大。
回复

使用道具 举报

ID:278457 发表于 2024-10-5 01:59 | 显示全部楼层
xiaobendan001 发表于 2024-10-4 14:26
BCD码放数组里面,然后弄个函数,把数组地址和数据传进去,里面用一个循环搞定,这样应该简化不少吧。
大 ...

最好还是用语法搞定
回复

使用道具 举报

ID:579397 发表于 2024-10-5 03:46 | 显示全部楼层
本帖最后由 405616736 于 2024-10-5 23:30 编辑

int str[4]
        
if(aa==20)
        {
                aa=0;
                if(++temp==9999) temp=0;
                sprintf(str,"%04d",temp);        }


回复

使用道具 举报

ID:1109793 发表于 2024-10-5 07:52 | 显示全部楼层
405616736 发表于 2024-10-5 03:46
int str[4]
       
if(aa==20)

你这看起来简化了,编译出来可不一定吧
回复

使用道具 举报

ID:592807 发表于 2024-10-5 08:08 | 显示全部楼层
405616736 发表于 2024-10-5 03:46
int str[4]
       
if(aa==20)

将if判断语句那里换成==就是正解。
回复

使用道具 举报

ID:1109793 发表于 2024-10-5 09:12 | 显示全部楼层
405616736 发表于 2024-10-5 03:46
int str[4]
       
if(aa==20)

而且你这个sprintf输出的字符,不是BCD码吧。这样要是显示到比如数码管上面还得再处理一下吧。
回复

使用道具 举报

ID:579397 发表于 2024-10-5 14:41 | 显示全部楼层
黄youhui 发表于 2024-10-5 08:08
将if判断语句那里换成==就是正解。

手快写漏了
回复

使用道具 举报

ID:624769 发表于 2024-10-5 23:28 | 显示全部楼层
你要优化什么?
优化 C 语句看上去的简洁程度?
还是代码执行效率?
变量的占用量?
还是排版上毫无意义的一大堆括号?
回复

使用道具 举报

ID:278457 发表于 2024-10-6 04:57 | 显示全部楼层
xiaobendan001 发表于 2024-10-5 07:52
你这看起来简化了,编译出来可不一定吧

我的意思是IF能不能同时判断AA,BB。这样代码量就会很少
回复

使用道具 举报

ID:278457 发表于 2024-10-6 04:59 | 显示全部楼层
188610329 发表于 2024-10-5 23:28
你要优化什么?
优化 C 语句看上去的简洁程度?
还是代码执行效率?

我要C语句,简洁程度。
回复

使用道具 举报

ID:879348 发表于 2024-10-6 10:25 | 显示全部楼层
千百十个的运算做成一个函数,程序看上去会简洁点
回复

使用道具 举报

ID:1109793 发表于 2024-10-6 13:27 | 显示全部楼层
shenqiwei 发表于 2024-10-6 04:57
我的意思是IF能不能同时判断AA,BB。这样代码量就会很少

不懂同时怎样判断。把BCD那部分弄个函数,就很简洁了。

  1. uchar bcd[4],bcd2[4];
  2. void ibtd(uint i,uchar* mem){ //取余法获得BCD码
  3. uchar j;
  4. for(j=2;j<255;j--){                          
  5.         mem[j]=i%10;
  6.     i=i/10;
  7.     }   
  8. }
复制代码
回复

使用道具 举报

ID:401564 发表于 2024-10-7 10:52 | 显示全部楼层
循环用取模表达式,代码字母不可能不会少,但行数变少了
temp = (temp + 1) % 10000;
变量aa和bb如果是循环变化,同样也可以用取模
回复

使用道具 举报

ID:1134818 发表于 2024-10-27 19:37 | 显示全部楼层
1.去掉只有一句的if的括号
2.去掉没有用的if,比如12行、17行两对
3.把aa和bb写成a[0]和a[1],其他对应也写成数组,用个for
4.4个位也可以用数组+for
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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