操作数

Javascript基础

荒凉一梦 提交于 2020-01-22 04:46:27
变量 作用: 用来保存值 保存两种类型的值: 基本类型值,和引用类型值; 访问方式: 按值访问 和 按引用访问 操作方式: 直接操作保存在变量中的实际的值。 引用类型的值是保存在内存中的对象,不能直接操作对象的内存空间。实际上是在操作对象的引用而不是实际的对象。 数据类型 两大类 8 种数据类型 最新的 ECMAScript 标准定义了 8 种数据类型: 参考 MDN javascript 数据类型和数据结构 七种原始类型 – 简单数据类型 Boolean Null Null 类型只有一个值就是null值 Undefined Undefined类型只有一个值就是undefined值 Number BigInt String Symbol 和 Object – 复杂数据类型 ( ECMAScript 定义的对象中有两种属性:数据属性和访问器属性 来自 MDN) 原始值的定义 除 Object 以外的所有类型都是不可变的(值本身无法被改变)。例如: JavaScript中字符串是不可变的 (译注:如: JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变)。 我们称这些类型的值为“原始值”。 Javascript 操作符: 一元操作符 只能操作一个值的操作符是一元操作符。!(非) ++a --b ++前置和++后置共同点 所有编程语言都是一样的

中缀表达式求值

守給你的承諾、 提交于 2020-01-21 09:06:08
所谓 表达式的求值 就是从键盘上输入一个四则运算表达式按下Enter后在屏幕上输出表达式的结果。表达式的求值 在计算机的应用中非常广泛, 例如编译器中对所写的程序表达式的编译等。它 也是数据结构课程中栈这一章节中非常重要的一个算法,通过实现这个算法可以更好的掌握 和理解 栈的相关操作 。 中缀表达式是指运算符在运算数的中间,计算中缀表达式时需要用到两个栈:数字栈和运算符栈。在整个中缀表达式求值的过程中主要涉及到的模块有:栈的相关操作、优先级表的确立、输入的待计算字符串拆分为数字和运算符以及运算处理等。 一) 、整体算法思路 1) 、设立操作数栈和运算符栈,设表达式结束的标志是字符#,运算符栈底初始化为#,约定#运算符的优先级最小(这样做的目的是在当两个#相遇时就可以确定表达式扫描结束了)。 2) 、若当前扫描到的是操作数则果断将此数压栈进操作数栈,如果当前是符号栈则将该操作符和栈顶操作符进行优先级比较如果低于栈顶优先级则将操作符栈顶元素弹出并弹出两个操作数进行运算,运算完毕将结果压入栈中。如果当前符号的优先级高于栈顶优先级则将此运算符入栈。 3) 、循环操作2直到输入的表达式运算结束(运算符栈底的#和输入的表达式的#相遇)此时如若操作数栈中只剩一个数字则表示运算成功,此数就是表达式的结果,如果不止一个数则表示输入的表达式有误。 二) 、优先级表

在JavaScript中\"+\"什么时候是链接符号,什么时候是加法运算?

旧巷老猫 提交于 2020-01-20 12:26:02
二元加法运算符“+”在两个操作数都是数字或都是字符串时,计算结果是显而易见的。加号“+”的转换规则优先考虑字符串连接,如果其中一个操作数是字符串或者转换为字符串的对象,另外一个操作数会转换为字符串,加号讲践行字符串的连接操作。如果两个操作数都不是类字符串(string-like)的,那么都讲进行算数加法运算。 “+”操作符的行为表现为: 如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始类值:日期对象通过toString()方法执行转换,其他对象则通过valueOf()方法执行转换(如果valueOf()方法返回一个原始值的话)。由于多数对象都不具备可用的valueOf()方法,因此它们会通过toString()方法来执行转换。 如果对这段描述不太清楚,很可能是JavaScript中的一些基础概念还比较模糊,建议阅读以下文章: [ JavaScript中什么是对象 ? 什么是原始值 ?] [ JavaScript中对象转换为原始值遵循哪些原则?] 都进行了对象到原始值的转换后,如果其中一个操作数是字符串的话,另一个操作数也会转换为字符串,然后进行字符串连接。 否则,两个操作数都将转换为数字(或者NaN),然后进行加法操作。 1 1+2;// => 3:加法 2 "1"+"2" //=> b="12" 字符串连接 3 "1"+2 //=> c="12"

[转载] 32位汇编指令笔记

守給你的承諾、 提交于 2020-01-19 23:15:54
32位CPU所含有的寄存器有: PQJI~u9te} 4个数据寄存器(EAX、EBX、ECX和EDX) <,\Op=$l3I 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) ']'V?@H]4 6个段寄存器(ES、CS、SS、DS、FS和GS) ZaKT~f%%z 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) f*HEw 1、数据寄存器 s ~ Xa= +D 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 3Gyw^ {J 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 {!]7=K)W9 对低16位数据的存取,不会影响高16位的数据。 COnb@uD 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 90rY:!e 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 ~bsL W:.’ 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 %‘L+y 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、 除、输入/输出等操作,使用频率很高; E

JavaScript检查null与undefined以及==和===之间的差异

微笑、不失礼 提交于 2020-01-19 06:52:08
如何检查变量是否为 null 或 undefined 并且 null 和 undefined 什么区别? == 和 === 什么区别(很难在Google上搜索“ ===“)? #1楼 区别是微妙的。 在 JavaScript 中, undefined 变量是从未声明或从未分配值的变量。 假设您声明 var a; 例如,那么 a 将是 undefined ,因为它从未分配任何值。 但是如果您再分配 a = null; 那么 a 现在将为 null 。 在JavaScript中, null 是一个对象(如果您不相信我,请在JavaScript控制台中尝试 typeof null ),这意味着null是一个值(实际上,甚至 undefined 都是一个值)。 例: var a; typeof a; # => "undefined" a = null; typeof null; # => "object" 这在函数参数中可能很有用。 您可能需要一个默认值,但是认为null为可以接受的。 在这种情况下,您可以执行以下操作: function doSomething(first, second, optional) { if (typeof optional === "undefined") { optional = "three"; } // do something } 如果省略

四、JVM之栈与栈帧

帅比萌擦擦* 提交于 2020-01-18 18:54:51
栈: 1、又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把 另一端称为栈底。其特性是先进后出。 2、栈是线程私有的,生命周期跟线程相同,当创建一个线程时,同时会创建一个栈,栈的大小和深度都是固定的。 3、 方法参数列表中的变量,方法体中的基本数据类型的变量和引用数据类型的引用都存放在栈中,成员变量和对象本身不存放在栈中。运行时,成员函数的局部变量引用也存放在栈中。 4、栈的变量随着变量作用域的结束而释放,不需要jvm垃圾回收机制回收。 5、栈不是全局共享的,每个线程创建一个栈,该线程只能访问其对应的栈数据 6、栈内存的大小是在编译期就确定了的。 栈帧: 1、一个栈中可以有多个栈帧,栈帧随着方法的调用而创建,随着方法的结束而消亡。该栈帧中存储该方法中的变量,原则上各个栈帧之间的数据是不能共享的,但是在方法间调用时,jvm会将一方法的返回值赋值给调用它的栈帧中。每一个方法调用,就是一个压栈的过程,每个方法的结束就是一个弹栈的过程。压栈都将会将该栈帧置于栈顶,每个栈不会同时操作多个栈帧,只会操作栈顶,当栈顶操作结束时,会将该栈帧弹出,同时会释放该栈帧内存,其下一个栈帧将变为栈顶。栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。 2、栈中的优化

第2章 Java编程基础——FAQ2.15 Java中有哪些运算符?优先级如何?

心已入冬 提交于 2020-01-18 02:01:30
FAQ2.15 Java中有哪些运算符?优先级如何? 答: Java语言中的表达式是由运算符与操作数组合而成的,所谓的运算符就是用来做运算的符号。 在Java中的运算符,基本上可分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、转型运算符等。 一、算术运算符 所谓算术运算符,也就是我们数学中学到的加、减、乘、除等运算。这些操作可以对几个不同类型的数字进行混合运算,为了保证操作的精度,系统在运算的过程中会做相应的转换。 1、数字精度 所谓数字精度,也就是系统在做数字之间的算术运算时,为了尽最大可能地保持计算机的准确性,而自动进行相应的转换,将不同的数据类型转变为精度最高的数据类型。规则如下: 1)当使用运算符把两个操作数结合到一起时,在进行运算前两个操作数会转化成相同的类型。 2)两个操作数中有一个是double类型的,则另一个将转换成double型。 3)两个操作数中有一个是float类型的,则另一个将也转换成float型。 4)两个操作数中有一个是long类型的,则另一个将也转换成long型。 5)任何其它类型的操作,两个操作数都要转换成int类型。 2、整数型运算(int型) 对于int型的相关操作,加、减、乘的结果都是非常容易理解的,重点讲一下除(/)的运算。 两个整数相除的结果是整数,这一点与数学中是不同的,在Java中,两个整数相除的结果类似于数学中的求模运算

IDAPython基础教程3

浪子不回头ぞ 提交于 2020-01-17 22:59:47
给出的文件名为rabbithole 首先使用file命令查看一下 可以看到是64位的可执行文件 接下来我们切换到win,使用IDApro,以此文件为样例,学习IDAPython的用法。 操作数在逆向分析中经常被使用,所以了解所有的操作数对逆向分析非常有帮助。我们可以使用idc.GetOpTye(ea,n)来获取操作数类型,ea是一个地址,n是一个索引,从0开始。操作数一共有八种不同的类型。 O_void:如果指令没有任何操作数,则返回0 O_reg:如果操作数是寄存器,则返回这种类型,值为1 O_mem:如果操作数是直接寻址的内存,那么返回该类型,值为2,这种类型对寻找DATA非常有帮助 O_phrase:如果操作数是利用基址寄存器和变址寄存器的寻址操作的话,返回该类型,值为3 O_displ:如果操作数利用寄存器和位移的寻址操作的话,返回该类型,值为4,位移指的是类似下图中的0x18,这在获取结构体中的某个数据是非常常见的。 O_imm:如果操作数是一个确定的数值,那么返回该类型,值为5 O_far:这种返回类型在x86,x86_64的逆向中不常见,它用来判断直接访问远端地址的操作数,值为6 O_near:这种返回类型在x86,x86_64的逆向中不常见,它用来判断直接访问近端地址的操作数,值为7 我们可以在IDA中找到对应的类型进行测试 我这里就演示一个,我们把光标定位到pop

类文件结构

六月ゝ 毕业季﹏ 提交于 2020-01-17 13:36:28
Class文件格式只有两种数据类型:无符号数和表。 ① 无符号数属于基本的数据类型,以u1,u2,u4,u8来分别代表1个字节,2个字节,4个字节和8个字节的无符号数;可用来描述数字,索引引用,数量值或者按照UTF-8编码构成的字符串值。 ② 表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表都习惯性地以“_info”结尾。表用于描述由层次关系的复合结构的数据,整个Class文件本质上就是一张表。 魔数:每个class文件的头4个字节(0-3字节)(16进制),用来确定文件是否为一个可以被虚拟机接受的class文件,不用文件扩展名作为标识是因为扩展名可以随意改动 第4,5字节是次版本号;6,7字节是主版本号(JDK向下兼容以前版本的class文件)(0034是java 8) 8-9字节表示常量池的长度,0023表示常量池有#1~#34项(#0项不计入,也没有值) 常量池是在*.class文件中的一张表,常量池中存放两大常量项: ① 字面量(文本字符串,声明为final的常量值); ② 符号引用(类和接口的全限定名 (Fully Qualified Name)、字段的名称和描述符、方法的名称和描述符); 虚拟机根据这张表找到要执行的类名,方法名,参数类型,字面量等信息, 当类被加载,常量池信息会被放入运行时常量池,并且把里面的符号地址变为真实地址

verilog 心得

爱⌒轻易说出口 提交于 2020-01-17 04:28:17
verilog语法学习心得 1.数字电路基础知识: 布尔代数、门级电路的内部晶体管结构、组合逻辑电路分析与设计、触发器、时序逻辑电路分析与设计 2.数字系统的构成: 传感器 AD 数字处理器 DA 执行部件 3.程序通在硬件上的执行过程: C语言(经过编译)-->该处理器的机器语言(放入存储器)-->按时钟的节拍,逐条取出指令、分析指令、执行指令 4.DSP处理是个广泛概念,统指在数字系统中做的变换(DFT)、滤波、编码解码、加密解密、压缩解压等处理 5.数字处理器包括两部分:高速数据通道接口逻辑、高速算法电路逻辑 6.当前,IC产业包括IC制造和IC设计两部分,IC设计技术发展速度高于IC设计 7.FPGA设计的前续课程:数值分析、DSP、C语言、算法与数据结构、数字电路、HDL语言 计算机微体系结构 8.数字处理器处理性能的提高:软件算法的优化、微体系结构的优化 9.数字系统的实现方式: 编写C程序,然后用编译工具得到通用微处理器的机器指令代码,在通用微处理器上运行(如8051/ARM/PENTUIM) 专用DSP硬件处理器 用FPGA硬件逻辑实现算法,但性能不如ASIC 用ASIC实现,经费充足、大批量的情况下使用,因为投片成本高、周期长 10.FPGA设计方法: IP核重用、并行设计、层次化模块化设计、top-down思想 FPGA设计分工:前端逻辑设计、后端电路实现