java中0是真是假_为什么0为假?
零可能为假,因为大多数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为假?相关推荐
- java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字
合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...
- java中oops是什么意思_什么是oop思想_什么是OOPS
什么是oop思想 OOPS is a programming approach which provides solution to real life problems with the help ...
- java中bjt和utc转化_如何在Java中转换UTC和本地时区
我对Java中的时区感到好奇.我想从设备获取UTC时间(以毫秒为单位)并发送到服务器.当服务器向用户显示时间时,服务器会将其转换为本地时区.我系统中的时区是澳大利亚/悉尼(UTC + 11:00),测 ...
- java中如何调用自身结构_如何在Java中的自定义异常中设置我自己的消息,可以检索我的getMessage()但是没有使用构造函数,有什么办法吗?...
我刚学习 Java中的异常处理.我想知道的不是尝试说: throw new Exception("My Message"); 和 String message=ex.getMess ...
- java中随机数怎么定义类_浅析Java中的随机数类
Java中的随机数是否可以重复?Java中产生的随机数能否可以用来产生数据库主键?带着这个问题,我们做了一系列测试. 1.测试一: 使用不带参数的Random()构造函数 * @author Carl ...
- java中什么表示菜单项_下列类型中,表示菜单项的是( )。_学小易找答案
[单选题]下列项目属于直接费用的是( ). [单选题]已知立体的三视图,选择正确的立体图 [填空题]气候统计预测,一般分为四步.首先,( );其次,( );再次,( );最后,( ). A 建立统计模 ...
- java中获取文件总行数_关于java:如何以有效的方式获取文件中的行数?
本问题已经有最佳答案,请猛点这里访问. 我有一个大文件. 它包括大约3.000-20.000行. 如何使用Java获取文件中的行总数? 从你的评论到答案来判断,你要找的词是"有效的" ...
- java中的Cookie是什么_第74节:Java中的Cookie和Session
第74节:第74节:Java中的Cookie和Session ServletContext: 什么是ServletContext,有什么用哦,怎么用呢? 启动服务器后,会给每个应用程序创建一个Serv ...
- java中include标签的用法_原 ng-include用法分析以及多标签页面的简单实现方式
在平时的项目开发中,应该会经常遇到上图所示的需求,就是在一个页面中有多个标签,被选中的标签颜色会高亮显示,切换不同标签显示相应的不同内容.如果内容代码过多则写在同一个html文件就会显得特别乱,所以这 ...
- java中常量final的用法_详解Java中final的用法
本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下 概念 final 具有"不可改变的"的含义,可以修 ...
最新文章
- 多喜临门,BCH币价应声上涨
- sys模块 和os模块
- 中学计算机老师 当领导可能性,求分享,当中学计算机老师带信息学奥赛是怎样的感受 - 信息科学技术学院(EECS)版 - 北大未名BBS...
- mjpg-streamer在Ubuntu下编译,运行
- python中uniform randint_python生成随机数:uniform(), randint(), gauss(), expovariate()
- 5分钟部署一个Hello World Servlet到CloudFoundry
- 常用的7个SQl优化技巧
- hash table(完全散列实现的哈希表)
- 数据分析之如何制作数据埋点文档(二)
- HTML5的离线储存
- mysql最早出现的数据模型_在数据库发展史中出现的数据模型有哪些
- Ubuntu 16.04升级Linux内核为4.7.0最快的方法
- python递归实现快速对一个给定字符串排序输出
- Oracle如何查看表空间的大小及使用情况
- 在网站中使用谷歌“ROBOTO”字体(解决ios数字1和0大小不等宽问题)
- 第三届“传智杯”全国大学生IT技能大赛(初赛B组)
- 单片机---STM8开发环境搭建与标准库工程创建
- 如何利用STM32和迪文串口屏以及WIFI模组进行数据交互
- 芯片丨英特尔拟收购初创公司Barefoot Networks 后者曾获腾讯阿里投资
- 地理思维导图怎么画?五步教你思维导图画法