前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础知识 | 每日一练(172)

基础知识 | 每日一练(172)

作者头像
小林C语言
发布2019-11-12 21:28:09
3070
发布2019-11-12 21:28:09
举报

基础知识练习

士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ——菜根谭

读者:人们说编译器优化的很好, 我们不在需要为速度而写汇编了, 但我

的编译器连用移位代替 i/=2 都做不到。

小林:i 是有符号还是无符号?如果是有符号, 移位并不等价 (提示: 想想如果 i 是个负的奇数), 所以编译器没有使用是对的。

读者:怎样不用临时变量而交换两个值?

小林:一个标准而古老的汇编程序员的技巧是:

a ^= b;

b ^= a;

a ^= b;

但是这样的代码在现代高级程序设计语言中没什么用处。临时变量基本上是自由使用的, 一般上的三个赋值是:

int t = a;

a = b;

b = t;

这不只对读者更清晰, 更有可能被编译器辨别出来而变成最有效的代码 (例如有可能使用 EXCH 指令)。后面的代码明显的可以用于指针和浮点值, 而不象XOR 技巧只能用于整型。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档