`

学习计算机底层知识:“反转”思考方式

阅读更多
一、高层知识点
        JDK集合框架中有一个接口:Comparator,其中有个compare()方法,方法签名需要传递两个参数,暂且就声明为arg1和arg2,用来互相比较两个参数的大小,该方法返回一个int类型的值,该结果有以下三种:
        1.负数:arg1比arg2小。
        2.零:arg1与arg2相等。
        3.整数:arg1比arg2大。
        通过观察上述三种结果,我想到了用减法运算来实现这个方法。
再来看另外一个知识点,String类 。其中有一个方法为compareTo(),方法签名需要传递一个String类参数,当前String对象与这个参数进行大小比较;观察其源码,是通过逐个字符做减法运算进行比较的,也是返回int类型的值(负数、零、整数)用以判断String大小的。
我在没学汇编语言的时候,我只是认为Java的实现机制是这样的,对于底层机制是如何实现的,或者说底层的比较机制是不是这样的没有一丝概念。
二、底层知识点
        介绍了这两个高层知识点后,再来介绍下与之相呼应的底层知识点。前些日子在学汇编语言的时候,学到了一个cmp指令,这里引用其原文(《汇编语言第二版》):
引用

        cmp指令是比较指令,cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较的结果。
        cmp指令格式: 操作对象1,操作对象2
功能:计算操作对象1-操作对象2,但并不保存结果,仅仅根据计算结果对标志寄存器进行设置。

        针对cmp指令,其相关的标志寄存器有两个比较重要的标志位:ZF和CF。
        ZF是零标志位,相关指令执行后,其结果是否为0。如果结果为0那么ZF=1;如果结果不为0,那么ZF=0。
        CF是进位标志位,该标志位记录了运算结果的最高有效位向更高位的进位值,或从更高位借位值。
        结合开头讲述的两个高层知识点来说,用汇编语言来说明:
        cmp arg1,arg2
        如果arg1 = arg2,则CF=0,ZF=1
        如果arg1 ≠ arg2, 则CF=0,ZF=0
        如果arg1 > arg2,则CF=0,ZF=0
        如果arg1 ≥ arg2,则CF=0,(ZF有可能为0也有可能为1)
        如果arg1 < arg2,则CF=1,ZF=0
        如果arg1 ≤ arg2,则CF=1,(ZF有可能为0也有可能为1)

        Java中的比较原理和汇编语言的比较原理上基本上是一致的。我不太确定这是不是巧合,又或许是Java语言就是按照底层的这种机制来实现的。不过这个疑问不会对学习底层知识有任何的影响,任它高级语言变化来变化去,底层还是那亘古不变的机制。

三、总结
        知识网是由N多线连接成的,而线又由两个点连接起来的。知识点不应该是被孤立的,它应该是和其它知识点相交的、相通的、相融的。
        这篇博文中讲述的几个例子并不是很深入,其实主要是想阐述怎样使用“反转”的思考方式去学习底层知识,而不是说单单去学习底层知识,知识是要被应用的,而不是学习过后记在脑子里不用。
        用高层知识去学习底层知识,其实就是一种本末倒置的手法。还是用以往先从底层知识学起,再逐步学习高层知识,对我个人来说起到的效果不是很明显;反过来用“反转”的思考方式,带着对高层知识的疑问去学习底层知识,会起到意想不到的效果。换句话来说就是通过高层知识来去学习底层知识,然后再用底层知识来理解它是怎么被高层知识应用的(控制反转思想?)。



1
1
分享到:
评论
3 楼 jdftkti 2010-12-29  
受益匪浅。
2 楼 深夜未眠 2010-12-20  
zhangcong170 写道
很不错  前阵子正好用到了Comparator,compare()方法的实现确实可以按照你的方式改进一下  多想想底层的实现

感谢的你鼓励~~~
1 楼 zhangcong170 2010-12-17  
很不错  前阵子正好用到了Comparator,compare()方法的实现确实可以按照你的方式改进一下  多想想底层的实现

相关推荐

    北航计算机本科生上机题

    C语言作为底层编程语言,对于理解计算机工作原理及高效编程至关重要。同时,熟悉并能灵活运用数组、链表、栈、队列、树、图等基本数据结构,以及排序、搜索、递归等常用算法,也是解决这些上机题的关键。 例如,...

    计算机笔试题.doc

    1. **古币真伪问题**:金币上标注的是“公元前3世纪”,而考古学家断定它是假币,原因是考古学家能够通过材料学、工艺学或历史文献等多种方式验证金币的真实年代。如果金币上的年代标识与实际年代不符,例如金币的...

    计算机组成原理—流水灯设计实验报告.pdf

    《计算机组成原理—流水灯设计...总的来说,这个实验设计是计算机组成原理教学中的一个重要环节,它让学生在实践中巩固理论知识,提高独立思考和解决问题的能力,为未来在电子工程和计算机科学领域的工作打下坚实基础。

    软件工程师找工作150问

    - **重要性**:游戏开发是计算机图形学和人工智能的重要应用领域。 - **核心知识点**: - 游戏物理引擎的工作原理:碰撞检测、刚体模拟等。 - 图形渲染技术:光照模型、纹理映射等。 - AI 技术在游戏中的应用:...

    emu8086

    学习emu8086不仅能够掌握8086汇编语言,还能培养解决问题和逻辑思维的能力,对于计算机底层原理的理解有着重要作用。无论你是计算机科学的学生,还是对编程感兴趣的爱好者,这个工具都是一个极好的资源。

    Facebook, Google, Microsoft 程序员面试 150 题

    - **低级别概念**:操作系统原理、网络协议等计算机底层知识。 通过以上内容可以看出,《Cracking the Coding Interview》这本书不仅涵盖了技术面试的各种常见题目类型,还提供了丰富的面试准备建议和策略。无论是...

    C++面试题点播一

    对于面试中的发散性思维问题,如不使用加减乘除运算符实现整数加法,面试者需要思考面试官可能考查的技能、整数加法的本质以及是否能用其他方式替代传统加法操作符。这类问题考察应聘者的创新能力、理解问题本质的...

    微型机与接口技术课程设计键盘扫描设计论文

    在这个课程设计中,学生需要运用所学知识,尤其是关于8255通用并行I/O接口芯片的知识,来设计和实现键盘扫描功能。键盘扫描是电子设备中常见的输入处理机制,对于理解和实践微处理器系统有重大意义。 1.1 课题设计...

    lab2_Bomb-Lab-Defusing-a-binary-bomb.zip_bomb lab2_bomb汇编_lab2 b

    在计算机科学领域,尤其是操作系统和系统编程的学习过程中,《计算机系统应用》(Computer Systems: A Programmer's Perspective,简称CSAPP)是一本极具影响力的教材。其中的"Bomb Lab"是其最富盛名的实践环节之一...

    各公司Java面试题 2.zip

    这部分知识能够体现你对计算机系统底层的理解。 7. **网络**:网络基础包括TCP/IP协议栈,HTTP/HTTPS协议,三次握手四次挥手,负载均衡,网络安全等。面试官可能通过设计网络通信方案或分析网络问题来测试你的网络...

    数据结构试验c语言版

    C语言是一种底层且高效的语言,常用于实现这些数据结构。在这个“数据结构试验c语言版”中,我们主要关注两个关键主题:线性链表和矩阵转置。 线性链表是数据结构的基本形式,它与数组不同,不连续存储元素。在链表...

    python-leetcode面试题解之二进制求和.zip

    在求职面试中,熟练掌握二进制和位运算的知识是非常重要的,因为它们反映了你对计算机底层工作原理的理解。面试官可能会考察你在面对复杂问题时如何运用这些基础知识,以评估你的编程思维和问题解决能力。这个压缩包...

    CC++suanfashili

    这些算法是计算机科学和软件工程领域的基础,对于提升编程能力,尤其是解决复杂问题的能力非常有帮助。接下来,我们将详细探讨其中涉及的主要知识点。 首先,C++和C语言是两种广泛使用的编程语言。C语言是一种底层...

    acm程序设计曾宗根(主要看第二章,用STL解题会很方便)

    根据给定文件的信息,我们可以提炼出以下几个重要的知识点: ### ACM程序设计竞赛介绍 - **背景与意义**:ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest, ACM/ICPC)是由ACM...

    2-10进制互相转换

    在计算机科学中,数字的表示方式至关重要,尤其是在编程领域。...总之,"2-10进制互相转换"是一个很好的教学资源,它将理论知识与实践操作结合,有助于初学者深入理解计算机底层运作,并提升编程技能。

    C语言经典算法100例

    "C语言经典算法100例"这个资源旨在帮助学习者深入理解和掌握C语言编程中的各种常见算法,这对于任何希望在IT领域,尤其是系统开发、数据处理或软件工程方向发展的人来说,都是必不可少的基础知识。 首先,我们要...

    Cracking-the-code-interview-solution-java.rar_The Interview_crac

    《破解编码面试:Java版答案与范例》是面试准备的重要资源,涵盖了计算机科学与编程领域的核心知识点。这本书,通常简称为"Cracking the Code Interview"或"CtCI",是一本广受欢迎的指南,旨在帮助求职者在技术面试...

    数字图像处理系统的设计 DSP课程设计

    通过这个课程设计,学生不仅能学习到理论知识,还能提升实际操作和问题解决的能力,为今后在图像处理领域的工作或研究打下坚实的基础。同时,课程设计的评估标准也强调了学生的创新性和综合应用能力,鼓励他们在实践...

    C++版的数据结构试题

    数据结构是计算机科学中的核心课程,它探讨了如何在计算机中高效地组织和管理数据。C++作为一种强大的编程语言,是实现数据结构的理想选择,因为它提供了面向对象的特性以及底层控制,使得我们可以精确地设计和操作...

    西南科技大学SWUST OJ 线性结构,链表题解答案 线性结构.zip

    通过这些题目,学习者不仅可以巩固链表基础知识,还能锻炼逻辑思维和问题解决能力。理解并熟练掌握链表的原理和操作,对于提升编程水平和应对实际工作中的数据处理问题具有重要意义。同时,参与SWUST OJ平台的练习,...

Global site tag (gtag.js) - Google Analytics