零可能为假,因为大多数CPU都有一个可用于分支的零标志。它保存比较操作。

让我们看看为什么。

一些伪代码,因为观众可能不阅读汇编

c-源简单循环调用摆动10次

for(intfoo=10;foo>0;foo--)/* down count loop is shorter */{wibble();}

为此假装一些

0x1000 ld a 0x0a 'foo=10

0x1002 call 0x1234 'call wibble()

0x1005 dec a 'foo--

0x1006 jrnz -0x06 'jump back to 0x1000 if not zero

0x1008

c-另一个简单的循环调用摆动10次

for(intfoo=0;foo<10;foo--)/* up count loop is longer */{wibble();}

这种情况下的一些假装

0x1000 ld a 0x00 'foo=0

0x1002 call 0x1234 'call wibble()

0x1005 dec a 'foo--

0x1006 cmp 0x0a 'compare foo to 10 ( like a subtract but we throw the result away)

0x1008 jrns -0x08 'jump back to 0x1000 if compare was negative

0x100a

一些更多的c源

intfoo=10;if(foo)wibble()

和组装

0x1000 ld a 0x10

0x1002 jz 0x3

0x1004 call 0x1234

0x1007

看到那有多短?

一些更多的c源

intfoo=10;if(foo==0)wibble()

和程序集(让我们假设有一个可以在不比较的情况下替换== 0的边际智能编译器)

0x1000 ld a 0x10

0x1002 jz 0x3

0x1004 call 0x1234

0x1007

现在让我们尝试true = 1的约定

其他一些c源代码#define TRUE 1 int foo = TRUE; 如果(foo == TRUE)wibble()

和组装

0x1000 ld a 0x1

0x1002 cmp a 0x01

0x1004 jz 0x3

0x1006 call 0x1234

0x1009

看到非零为真的情况有多短?

真正的早期CPU带有少量附加到累加器的标志。

检查a> b或a = b通常采用比较指令。

除非B为零-在这种情况下,将零标志设置为一个简单的逻辑或或累加器中的所有位。

或负数,如果使用二进制补码运算,则仅使用“符号位”即累加器的最高有效位。(大多数情况下我们这样做)

让我们重申一下。在某些较旧的CPU上,对于累加器等于0或小于零的累加器,不必使用比较指令。

现在您知道为什么零可能为假吗?

请注意,这是伪代码,没有真正的指令集看起来像这样。如果您知道汇编,就会知道我在这里简化了很多事情。如果您对编译器设计有所了解,则无需阅读此答案。任何对循环展开或分支预测一无所知的人,高级班都在203房间的大厅下。

java中0是真是假_为什么0为假?相关推荐

  1. java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字

    合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...

  2. java中oops是什么意思_什么是oop思想_什么是OOPS

    什么是oop思想 OOPS is a programming approach which provides solution to real life problems with the help ...

  3. java中bjt和utc转化_如何在Java中转换UTC和本地时区

    我对Java中的时区感到好奇.我想从设备获取UTC时间(以毫秒为单位)并发送到服务器.当服务器向用户显示时间时,服务器会将其转换为本地时区.我系统中的时区是澳大利亚/悉尼(UTC + 11:00),测 ...

  4. java中如何调用自身结构_如何在Java中的自定义异常中设置我自己的消息,可以检索我的getMessage()但是没有使用构造函数,有什么办法吗?...

    我刚学习 Java中的异常处理.我想知道的不是尝试说: throw new Exception("My Message"); 和 String message=ex.getMess ...

  5. java中随机数怎么定义类_浅析Java中的随机数类

    Java中的随机数是否可以重复?Java中产生的随机数能否可以用来产生数据库主键?带着这个问题,我们做了一系列测试. 1.测试一: 使用不带参数的Random()构造函数 * @author Carl ...

  6. java中什么表示菜单项_下列类型中,表示菜单项的是( )。_学小易找答案

    [单选题]下列项目属于直接费用的是( ). [单选题]已知立体的三视图,选择正确的立体图 [填空题]气候统计预测,一般分为四步.首先,( );其次,( );再次,( );最后,( ). A 建立统计模 ...

  7. java中获取文件总行数_关于java:如何以有效的方式获取文件中的行数?

    本问题已经有最佳答案,请猛点这里访问. 我有一个大文件. 它包括大约3.000-20.000行. 如何使用Java获取文件中的行总数? 从你的评论到答案来判断,你要找的词是"有效的" ...

  8. java中的Cookie是什么_第74节:Java中的Cookie和Session

    第74节:第74节:Java中的Cookie和Session ServletContext: 什么是ServletContext,有什么用哦,怎么用呢? 启动服务器后,会给每个应用程序创建一个Serv ...

  9. java中include标签的用法_原 ng-include用法分析以及多标签页面的简单实现方式

    在平时的项目开发中,应该会经常遇到上图所示的需求,就是在一个页面中有多个标签,被选中的标签颜色会高亮显示,切换不同标签显示相应的不同内容.如果内容代码过多则写在同一个html文件就会显得特别乱,所以这 ...

  10. java中常量final的用法_详解Java中final的用法

    本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下 概念 final 具有"不可改变的"的含义,可以修 ...

最新文章

  1. 多喜临门,BCH币价应声上涨
  2. sys模块 和os模块
  3. 中学计算机老师 当领导可能性,求分享,当中学计算机老师带信息学奥赛是怎样的感受 - 信息科学技术学院(EECS)版 - 北大未名BBS...
  4. mjpg-streamer在Ubuntu下编译,运行
  5. python中uniform randint_python生成随机数:uniform(), randint(), gauss(), expovariate()
  6. 5分钟部署一个Hello World Servlet到CloudFoundry
  7. 常用的7个SQl优化技巧
  8. hash table(完全散列实现的哈希表)
  9. 数据分析之如何制作数据埋点文档(二)
  10. HTML5的离线储存
  11. mysql最早出现的数据模型_在数据库发展史中出现的数据模型有哪些
  12. Ubuntu 16.04升级Linux内核为4.7.0最快的方法
  13. python递归实现快速对一个给定字符串排序输出
  14. Oracle如何查看表空间的大小及使用情况
  15. 在网站中使用谷歌“ROBOTO”字体(解决ios数字1和0大小不等宽问题)
  16. 第三届“传智杯”全国大学生IT技能大赛(初赛B组)
  17. 单片机---STM8开发环境搭建与标准库工程创建
  18. 如何利用STM32和迪文串口屏以及WIFI模组进行数据交互
  19. 芯片丨英特尔拟收购初创公司Barefoot Networks 后者曾获腾讯阿里投资
  20. 地理思维导图怎么画?五步教你思维导图画法

热门文章

  1. 跨境卖家如何hold住极具消费潜力的Z世代?
  2. dir under linux.Linux下的类dir程序.
  3. Unity3D用状态机制作角色控制系统
  4. 谷歌书签同步到gitee
  5. 人工智能数学课高等数学线性微积分数学教程笔记(7. 最优化)
  6. matlab基础05
  7. TDSQL:腾讯金融级分布式数据库解决方案
  8. Java接口限流算法
  9. win10 metro app(应用商店中的APP)如何走代理?
  10. 微调电位器命名规则_电位器物料规格描述规范