符号计算

链接过程详解

橙三吉。 提交于 2019-12-11 05:39:26
一:链接的基本概念 链接(linking)是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。 链接可以执行于编译时,也可以执行于加载时,甚至执行于运行时。在现代系统中,链接是由叫做链接器(linker)的程序自动执行的。 为什么需要链接器呢?一切都是为了简单、为了方便!试想一下,一个巨大的工程有巨大的源文件,包含N多个模块,如果没有链接的存在,那么当你改动某个模块时,不得不重新编译整个工程,消耗巨大的时间和资源。而在链接器的帮助下,你只需要简单编译修改过的模块,之后重新链接生成可执行文件就OK了。 下面,我们将基于一个运行Linux的x86-64系统,详细讨论关于链接的各个方面。 二:从代码到可执行文件 考虑如下的一个c语言程序: code/link/main.c int sun(int *a, int n); int array[2] = {1, 2}; int main() { int val = sum(array, 2); return val; } code/link/sum.c int sum(int *a, int n) { int i, s = 0; for (i = 0; i < n; i++) s += a[i]; return s; } 从源文件到可执行文件需要哪几个步骤呢? 1:预处理器将C的源程序main

go语言基础

隐身守侯 提交于 2019-12-10 16:59:16
1, go环境与编辑工具安装 2, hello,word 3, 数据类型 4, 变量与常量 5, 流程控制与循环语句 6, 函数 7, 包 8, 数组 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1, go环境与编辑工具安装 下载地址: https://golang.org/dl/ 下载地址: https://golang.google.cn/dl/ 下载后点击注册机,点击next,直到完成安装, 将安装完成的文件Go\bin添加到计算环境变量中即可.在命令行可以测试,输入go env.安装完成将会go语言的环境配置. 其中GOPATH:是go文件编辑存储路径, GOROOT:是go环境路径 下在Go的编辑器: https://www.jetbrains.com/go/ . 无脑下一步即可, 2, hello, word! go的第一个程序: Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 让我们来看下以上程序的各个部分

在没有符号和FPO的情况下遍历堆栈(帧指针省略)

谁说我不能喝 提交于 2019-12-09 18:57:08
下面是应用程序崩溃转储的调用堆栈。报告的崩溃是名为“HelperLibrary”的模块内的访问冲突,我们没有该模块的符号或源代码。调用堆栈看起来不太可能: 0:000> kv ChildEBP RetAddr Args to Child WARNING: Stack unwind information not available. Following frames may be wrong. 0028fcec 74ba339a 7efde000 0028fd38 77479ed2 HelperLibrary+0x1014 0028fcf8 77479ed2 7efde000 776a5346 00000000 kernel32!BaseThreadInitThunk+0xe (FPO: [1,0,0]) 0028fd38 77479ea5 011212b2 7efde000 00000000 ntdll!__RtlUserThreadStart+0x70 (FPO: [SEH]) 0028fd50 00000000 011212b2 7efde000 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [2,2,0]) 除了HelperLibrary+0x1014之外,这里没有其他真正的帧,但是我们非常确定堆栈上应该还有其他代码

进制转换

依然范特西╮ 提交于 2019-12-07 23:36:35
我们知道十进制转换成二进制用短除法,但是为什么用短除法呢?请往下看。 “数制”只是一套符号系统来表示指称“量”的多少。我们用“1”这个符号来表示一个这一“量”的概念。自然界的“量”是无穷的,我们不可能为每一个“量”都造一个符号,这样的系统没人记得住。所以必须用有限的符号按一定的规律进行排列组合来表示这无限的“量”。符号是有限的,这些符号按照某种规则进行排列组合的个数是无限的。十进制是10个符号的排列组合,二进制是2个符号的排列组合。 在进行进制转换时有一基本原则:转换后表达的“量”的多少不能发生改变。二进制中的111个苹果和十进制中的7个苹果是一样多的。 十进制中的数位排列是这样的…… 万 千 百 十 个 十分 百分 千分…… R进制中的数位排列是这样的……R^4 R^3R^2 R^1 R^0 R^-1 R^-2 R^-3…… 可以看出相邻的数位间相差进制的一次方。 以下部分来源:知乎网友 进制这事儿,说到底就是位值原理,即:同一个数字,放在不同的数位上,代表不同大小的“量”。例如:十进制中,百位上的1表示100,十位上的1表示10。 任何进制中,每个数都可以按 位权 展开成各个数位上的数字乘以对应数位的位权,再相加的形式,如:   十进制的123=1×100+2×10+3×1   十进制的9876=9×1000+8×100+7×10+6×1   问:为啥相应的数位是1000

自下而上语法分析

跟風遠走 提交于 2019-12-06 22:07:33
1.已知文法: E→E+T | T T→T*F | F F→(E) | i 以句柄作为可归约串,写出符号串‘i+i*i#’的"移进-归约"分析过程。 符号栈 输入串 动作 # I+i*i# 移进 #i +i*i# 归约 #F +i*i# 归约 #T +i*i# 归约 #E +i*i# 移进 #E+ i*i# 移进 #E+I *i# 移进 #E+F *i# 归约 #E+T *i# 归约 #E+T* i# 移进 #E+T*I # 归约 #E+T*F # 归约 #E+T # 归约 #E # 接受 2.P121练习1的(1)(2)。 1)计算FIRSTVT和 LASTVT。 2)找三种关系对。 3)构造算符优先关系表。 S->#S# S->a|∧|(T) T->T,S|S 计算FIRSTVT和 LASTVT FIRSTVT(S)={ a , ∧ , ( } FIRSTVT(T)={ , , a , ∧ , ( } LASTVT(S)={a , ∧ , ) } LASTVT(T)={ , , a , ∧ , ) } 找三种关系对 = < > (T) #S# #S (T ,S S# T) T, a ∧ , ( ) # a > > > ∧ > > > , < < > < > ( < < < < = ) > > > # < < < = 来源: https://www.cnblogs.com

自下而上语法分析

只愿长相守 提交于 2019-12-06 20:40:34
1.已知文法: E→E+T | T T→T*F | F F→(E) | i 以句柄作为可归约串,写出符号串‘i+i*i#’的"移进-归约"分析过程。 答: 符号串‘i+i*i#’的"移进-归约"分析过程为: 符号栈 输入串 动作 # i+i*i# 移进 #i +i*i# 归约 #F +i*i# 归约 #T +i*i# 归约 #E +i*i# 移进 #E+ i*i# 移进 #E+i *i# 归约 #E+F *i# 归约 #E+T *i# 归约 #E+T* i# 移进 #E+T*i # 归约 #E+T*F # 归约 #E+T # 归约 #E # 接受 2.P121练习1的(1)(2)。 1)计算FIRSTVT和 LASTVT。 2)找三种关系对。 3)构造算符优先关系表。 解:1) 计算FIRSTVT和 LASTVT。   为:       FIRSTVT(S)={a,^,(}       FIRSTVT(T)={, ,a,^,(}       LASTVT(S)={a,^,)}       LASTVT(T)={,,a,^,)} 解:2) 找三种关系对。   为:       =       #S#       (T)       <       #S       (T       ,S       >       S#       T)       T, 解:3)

第十三次作业

北城余情 提交于 2019-12-06 15:16:37
1.已知文法: E→E+T | T T→T*F | F F→(E) | i 以句柄作为可归约串,写出符号串‘i+i*i#’的"移进-归约"分析过程。 符号栈 输入串 动作 # i+i*i# 移进 #i +i*i# 归约 #F +i*i# 归约 #T +i*i# 归约 #E +i*i# 移进 #E+ i*i# 移进 #E+i *i# 归约 #E+F *i# 归约 #E+T *i# 移进 #E+T* i# 移进 #E+T*i # 归约 #E+T*F # 归约 #E+T # 归约 #E # 接受 2.P121练习1的(1)(2)。 1)计算FIRSTVT和 LASTVT。 2)找三种关系对。 3)构造算符优先关系表。 (1) FIRSTVT(S) = {a , ^ , ( } FIRSTVT(T) = {,, a , ^ , ( } LASTVT(S) = {a , ^ , ) } LASTVT(T) = {,, a , ^ , ) } (2) 三种关系对。 = < > (T) #S# #S (T ,S S# T) T, (3)构造算符优先关系表 a ^ , ( ) # a > > > ^ > > > , < < > < > ( < < < < = ) > > > # < < < = 来源: https://www.cnblogs.com/WEJACKSI/p/11992321.html

负数在计算机中是怎么存储

别说谁变了你拦得住时间么 提交于 2019-12-06 15:09:32
今天,发生一件非常有趣的事情。 公司同事问了我一个问题:为什么 2.0 - 1.1 = 0.89999999 呢?不应该是 0.9吗? 原来是,他问了周围一圈的同事,都给他的是同一个回答,说这是精度问题。他百思不得其解,怎么就会产生精度问题呢。再问,就没人知道原因了。 然后,我就看到了他抱着一本厚厚的书在看。拿过来一看,是一本Java书,厚厚的六百多页,这还仅是第一卷。哟呵,这是准备大干一场啊。 看在他这么努力学习的份上,还有他那对知识极度渴望的眼神。我决定,把我毕生所学传授与他。 于是,就给他详细讲解了,计算机中是怎么存储一个数的,十进制是怎么在转二进制的过程中丢失精度的,以及浮点数是怎么遵循IEEE 754 规范的,在浮点数进行加减运算的过程中会经历对阶、移位运算等过程,以及在此过程中是怎么丢失精度的。(这些问题在之前的文章中都有解答,参看“为什么0.1+0.2=0.30000000000000004”) 然后,成功的把他彻底搞懵逼了。怎么这么难啊。 原来,他的计算机基础比我还匮乏,不知道什么是位运算,不知道什么是原码、反码和补码。 本着我的热心肠,我就给他普及了一下这些知识 ---- 负数的补码形式和位移运算。 我们知道,一个数分为有符号和无符号。对于,有符号的数来说,最高位代表符号位,即最高位1代表负数,0代表正数。 在计算机中,存储一个数的时候,都是以补码的形式存储的

12.自下而上语法分析

穿精又带淫゛_ 提交于 2019-12-06 13:54:52
1.已知文法: E→E+T | T T→T*F | F F→(E) | i 以句柄作为可归约串,写出符号串‘i+i*i#’的"移进-归约"分析过程。 符号栈 输入符号串 动作 # i+i*i# 移进 #i +i*i# 归约 #F +i*i# 归约 #T +i*i# 归约 #E +i*i# 移进 #E+ i*i# 移进 #E+i *i# 移进 #E+F *i# 归约 #E+T *i# 归约 #E+T* i# 移进 #E+T*i # 归约 #E+T*F # 归约 #E+T # 归约 #E # 接受 2.P121练习1的(1)(2)。 已知文法G[S]为: S->a|^|(T) T->T,S|S 1)计算FIRSTVT和 LASTVT。 2)找三种关系对。 3)构造算符优先关系表。 来源: https://www.cnblogs.com/linyanli/p/11975647.html

自下而上语法分析

百般思念 提交于 2019-12-06 13:09:33
1.已知文法: E→E+T | T T→T*F | F F→(E) | i 以句柄作为可归约串,写出符号串‘i+i*i#’的"移进-归约"分析过程。 符号栈 输入串 动作 # i+i*i# 移进 #i +i*i# 归约 #F +i*i# 归约 #T +i*i# 归约 #E +i*i# 移进 #E+ i*i# 移进 #E+i *i# 归约 #E+F *i# 归约 #E+T *i# 归约 #E+T* i# 移进 #E+T*i # 归约 #E+T*F # 归约 #E+T # 归约 #E # 接受/语法错误 2.P121练习1的(1)(2)。 1)计算FIRSTVT和 LASTVT。 2)找三种关系对。 3)构造算符优先关系表。 S->#S# S->a|∧|(T) T->T,S|S FIRSTVT(S)=( a,∧,( ) FIRSTVT(T)=( ,,a,∧,( ) LASTVT(S)=( a,∧,) ) LASTVT(T)=( ,,a,∧,) ) 关系对: = #S# (T) < #S (T ,S > S# T) T, 优先关系表 a ∧ , ( ) # a > > > ∧ > > > , < < > < > ( < < < < = ) > > > # < < < = 来源: https://www.cnblogs.com/zhff/p/11986492.html