专栏首页C语言入门到精通基础知识 | 每日一练(172)

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

基础知识练习

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

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

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

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

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

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

a ^= b;

b ^= a;

a ^= b;

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

int t = a;

a = b;

b = t;

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

本文分享自微信公众号 - C语言入门到精通(gh_780327809188)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基础知识 | 每日一练(105)

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

    闫小林
  • 基础知识 | 每日一面(76)

    小林:某些构造随编译器和硬件的实现而变化, 这一直是 C语言的一个特点。这种有意的不严格规定可以让编译器生成效率更高的代码, 而不必让所有程序为了不合理的情况承...

    闫小林
  • 基础知识 | 每日一练(122)

    但是编译器认为这个函数对于 qsort() 是错误类型。我要怎样转换这个函数指针才能避免这样的警告?

    闫小林
  • 高级编译器设计与实现(Steven.S.Muchnick).(中文版)

    本书是经典的编译器著作,与“龙书”齐名。书中针对现代语言和体系结构全面介绍了编译器设计与实现的高级论题,从编译器的基础领域中的高级问题开始,然后深入讨论了各种重...

    用户3157710
  • 让这三兄弟跟着你的代码

    在做嵌入式开发的时候,有时候我们需要指定变量地址,而不同的编译器使用的关键词和指令不一样,为了使我们的代码通用可以使用在不同的编译器下,那我们应该怎么做呢?

    用户1605515
  • 为什么需要一个聪明且强势的编译器

    我从2005年开始学习编程。到现在为止的这段期间,我已经使用了非常多的语言。包括C, Java, Ruby,JavaScript, Groovy, Scala.

    用户2936994
  • 程序员大神教你学C语言/C加加编程零基础新手入门

    第一章:编译器和程序 很多小伙伴都老是会碰到疑问,其实还是基础没打扎实,这些题如果你不看答案你能知道多少呢?如果还有很多不知道就证明基础没打扎实,如果你还在入门...

    企鹅号小编
  • 陈天奇:深度学习编译技术的现状和未来

    深度学习编译器的部署目标传统的深度学习框架也可以做,一个非常自然的问题是为什么不直接沿用传统的框架。这是一个编译器研究者来往往会忽略的问题。深度学习编译器只有在...

    机器之心
  • 编译器的结构|编译原理

    今天的内容是冠以编译器的结构。(翻译内容可能不太准确,谅解,凑合看吧)

    仇诺伊
  • 2020-3-4-T型图介绍

    比如下图,就是我先使用c语言编写了java编译器一个将java代码转成本地机器码的编译器。

    黄腾霄

扫码关注云+社区

领取腾讯云代金券