我已经开始编程了大约... 6-> 8年,我开始意识到当我做类似的事情时,我真的不知道在低水平的事情发生了什么。 p>
int i = j%348
问题是,我知道j%348做了什么,它将j除以348并找到余数。我不知道的是计算机如何做到这一点。
同样,我知道
try
{
blah();
}catch(Exception e){
blah2();
}
将调用blah
,如果blah抛出,它将调用blah2
...但是,我不知道计算机如何执行此操作而不是错误...崩溃或结束执行。
我认为为了让我在编程方面“更好”,我应该知道我的代码到底在做什么。 [这可能也会帮助我优化和......错误......不做愚蠢的事情]
我认为我所要求的可能是在大学里教授的大量东西,但说实话,如果我能学到一点,我会很高兴。
问题的关键是:
我要问的主题/计算机科学课程是什么?因为老实说,我不知道。
由于我不知道这个主题叫什么,我实际上找不到书或在线资源来了解这个主题,所以我有点卡住了。如果有人帮我= /
,我会永远感激答案 0 :(得分:12)
我想说第一部分是计算机体系结构,第二部分是编程语言。
有关计算机体系结构的一些好书,如果您有兴趣了解计算机如何执行程序,那么:
我不确定应该推荐什么来理解编程语言结构,例如捕获异常。可能是一本很好的编译器书。
特别是在第二个示例中,可能会以不同的方式实现不同的编程语言。例如,在诸如Java之类的虚拟机上运行的语言将使虚拟机保护它并抛出某些类型的异常,而在C ++中,这将以不同的方式处理。
答案 1 :(得分:7)
您应该首先查看程序集,然后进入编译器设计。如果您不知道汇编,那么编译器设计就会完全丢失。我个人刚刚开始组装,因为你确切的原因 - 我想了解我的代码在较低级别做了什么。
我找到了这个非常酷的资源:http://en.wikibooks.org/wiki/X86_Disassembly
基本上它是一本汇编书,解释了如何在汇编中执行更高级代码的一些概念,并且有一些示例说明了编译器如何在汇编中生成函数等。
答案 2 :(得分:1)
第一部分可能被认为是计算机工程,但第二部分只是语言设计。
答案 3 :(得分:1)
我认为您正在研究编译器如何将高级语言代码转换为机器指令。看看编译器设计。这是一个经典的book。
答案 4 :(得分:1)
听起来很模糊,就像你在谈论编译器构造和语言设计一样。
可以实现异常的(大多数)通用“CS事物”可能是延续(在其中包括Scheme中)。如果你还没有读过“计算机程序的结构和解释”(SICP,Web page here, including full text),那么可能值得快速浏览一下,它会轻易地触及编译器的构建。
答案 5 :(得分:0)
用于计算模数的实际机制可能在不同语言之间变化,然后在每种语言的实现之间变化。有一些关于算法here的信息。
也许算法是你感兴趣的一般领域?
答案 6 :(得分:0)
没有人在谈论模数的数学? 第一学期的媒体信息学(我在第五学期),课程:数学:
10%3 =?x%y = z
计算:
作为一个公式:
10 - (Math.round(10/3)* 3)= 1
带变量:
x%y = x - (Math.round(x / y)* y)
了解二进制文件,您将理解,每个数学运算都是基于加法。
答案 7 :(得分:0)
上面提到的书“计算系统的要素:从第一原理构建现代计算机”,作者:Noam Nisan和Shimon Schocken,提出了你以整体方式提出的问题类型:从架构到VM到编译器到OS。
答案 8 :(得分:0)
如果您不想花钱,可以使用一本名为“计算机组织和设计基础”的好书here(PDF链接)。我还推荐由Microsoft Press出版的Charles Petzold编写的“Code”。