打印

关于c语言的一些基本问题

[复制链接]
751|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djz1992|  楼主 | 2016-7-6 13:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 djz1992 于 2016-7-6 13:13 编辑

CCS编译会把写的繁琐的代码精简吗?
1.比如1234/256和1234》8,这两种哪个更省资源?
2、char a=1; if(a==1)和if(a)一样吗?

3、16位的b右移八位放到8位的a里,还需要 &0xff吗?还是自动变换数据类型的?如果写不写都可以,那写了& 0xff是不是增加了多余的计算步骤?
char a;
int16 b;
a=b >>8 ;
a=b >>8 & 0xff;

相关帖子

沙发
dirtwillfly| | 2016-7-6 14:43 | 只看该作者
具体优化到什么程度要看优化选项的。

使用特权

评论回复
板凳
dirtwillfly| | 2016-7-6 14:46 | 只看该作者
1、移位一般运算比较快
2、不一样啊。后者a非0就是真

使用特权

评论回复
地板
djz1992|  楼主 | 2016-7-7 08:33 | 只看该作者
本帖最后由 djz1992 于 2016-7-7 08:34 编辑
dirtwillfly 发表于 2016-7-6 14:46
1、移位一般运算比较快
2、不一样啊。后者a非0就是真

移位比取模快是吧第二个如果a只有或者0两个值,那还一样吗?

使用特权

评论回复
5
djz1992|  楼主 | 2016-7-7 08:34 | 只看该作者
dirtwillfly 发表于 2016-7-6 14:46
1、移位一般运算比较快
2、不一样啊。后者a非0就是真

还有第三个问题。。

使用特权

评论回复
6
dirtwillfly| | 2016-7-7 08:37 | 只看该作者
第三个问题,一般情况编译器会自动截取16位数的低8位赋给8位数
但也不排除会出现其他情况,比如出现警告等

使用特权

评论回复
7
dirtwillfly| | 2016-7-7 08:39 | 只看该作者
这类问题不同的编译器可能会给出不太一样的结果,最好还是编写个小程序验证一下。关于运算效率可以看编译生成的汇编代码。

使用特权

评论回复
8
datouyuan| | 2016-7-7 09:16 | 只看该作者
1: 都是常数,编译结果是一样的.
2: 编译结果不一样,一个是逻辑比较,一个是数值比较
3: 编译后看结果,keil 51这2个是一样的.

使用特权

评论回复
评论
xwj 2016-7-7 09:48 回复TA
第2条的逻辑都不一样好不好?2楼板凳是对的。if(a)等效于if(a != 0),而不是if(a==1) 
9
mcu5i51| | 2016-7-7 11:05 | 只看该作者
很多时候看情况,移位不一定会比除法快,和芯片以及处理的数据有关,编译器也会对特殊的常量数据优化

使用特权

评论回复
10
ddllxxrr| | 2016-7-7 11:20 | 只看该作者
1.比如1234/256和1234》8,这两种哪个更省资源?后一种
2、char a=1; if(a==1)和if(a)一样吗?不一样

3、16位的b右移八位放到8位的a里,还需要 &0xff吗?还是自动变换数据类型的?如果写不写都可以,那写了& 0xff是不是增加了多余的计算步骤?
char a;
int16 b;
a=b >>8 ;
a=b >>8 & 0xff;
不需要,增加这点不算啥!何必这么精打细算呢???

使用特权

评论回复
11
diweo| | 2016-7-7 11:47 | 只看该作者
现在的芯片资源跟原来的不可同日而语,编程时候尽量把意图表示出来,没必要为了省一两个字节或周期而在那里纠结。

使用特权

评论回复
12
hgjinwei| | 2016-7-7 12:33 | 只看该作者
想那么多会疯的,按自己最有把握的写就行了,也别管哪个编写会省点资源,编译器比想象中聪明多了。

你以为 1234 / 256 或者 1234 >> 8 ,丫真会给你编译出计算式啊?丫直接就给你赋个常数值 4 了。
而 x / 256 或者 x >> 8,一般都会编译成一样的指令码。

使用特权

评论回复
13
djz1992|  楼主 | 2016-7-8 13:30 | 只看该作者
dirtwillfly 发表于 2016-7-7 08:39
这类问题不同的编译器可能会给出不太一样的结果,最好还是编写个小程序验证一下。关于运算效率可以看编译生 ...

“关于运算效率可以看编译生成的汇编代码。”具体该怎么看?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

115

主题

620

帖子

5

粉丝