[应用相关] 关于c语言的一些基本问题

[复制链接]
698|10
 楼主| shashaa 发表于 2017-4-30 10:56 | 显示全部楼层 |阅读模式
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;
qiangweii 发表于 2017-4-30 10:58 | 显示全部楼层

具体优化到什么程度要看优化选项的。
litengg 发表于 2017-4-30 11:16 | 显示全部楼层
移位一般运算比较快吧
androidbus 发表于 2017-4-30 11:17 | 显示全部楼层
移位比取模快是吧第二个如果a只有或者0两个值,那还一样吗?
feiqi1 发表于 2017-4-30 11:41 | 显示全部楼层
一般情况编译器会自动截取16位数的低8位赋给8位数
但也不排除会出现其他情况,比如出现警告等
sourceInsight 发表于 2017-4-30 11:41 | 显示全部楼层
这类问题不同的编译器可能会给出不太一样的结果,最好还是编写个小程序验证一下。
boy1990 发表于 2017-4-30 11:48 | 显示全部楼层
关于运算效率可以看编译生成的汇编代码。
CallReceiver 发表于 2017-4-30 11:49 | 显示全部楼层
1: 都是常数,编译结果是一样的.
2: 编译结果不一样,一个是逻辑比较,一个是数值比较
xia00 发表于 2017-4-30 11:57 | 显示全部楼层
很多时候看情况,移位不一定会比除法快,和芯片以及处理的数据有关,编译器也会对特殊的常量数据优化
feiqi1 发表于 2017-4-30 11:57 | 显示全部楼层
现在的芯片资源跟原来的不可同日而语,编程时候尽量把意图表示出来,没必要为了省一两个字节或周期而在那里纠结。
huangcunxiake 发表于 2017-4-30 21:22 | 显示全部楼层
移位的操作确实快,不过要看是不是刚好移位就能完成。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

1494

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部