操作数

JAVA实现简易计算器

和自甴很熟 提交于 2020-02-29 15:41:02
简易计算器,可实现任意长度带括号带优先级的 ‘加减乘除幂’ 运算 还未加入报错机制,需要求表达式书写正确,不能存在左右括号数目不等或右括号前没有数字或除数为0等情况 /* 科学计算器,可实现任意长度带括号带优先级的 '加减乘除幂' 运算 还未加入报错机制,需要求表达式书写正确,不能存在左右括号数目不等或右括号前没有数字或除数为0等情况 */ import java . util . Hashtable ; import java . util . Stack ; public class ScientificCalculator { public static double calc ( double a , double b , char operator ) { switch ( operator ) { case '+' : return a + b ; case '-' : return a - b ; case '*' : return a * b ; case '/' : return a / b ; case '^' : return Math . pow ( a , b ) ; } return 0.0d ; } //出栈两个操作数,一个操作符,运算结果入操作数 需重复运算,所以写成一个函数 public static void calcTwo ( Stack <

反汇编学习

让人想犯罪 __ 提交于 2020-02-29 07:06:48
(转: http://www.kuqin.com/assemble/20071122/2492.html ) 汇编语言和CPU以及内存,端口等硬件知识是连在一起的. 这也是为什么汇编语言没有通用性的原因. 下面简单讲讲基本知识(针对INTEL x86及其兼容机)   ============================   x86汇编语言的指令,其操作对象是CPU上的寄存器,系统内存,或者立即数. 有些指令表面上没有操作数, 或者看上去缺少操作数, 其实该指令有内定的操作对象, 比如push指令, 一定是对SS:ESP指定的内存操作, 而cdq的操作对象一定是eax / edx.    在汇编语言中,寄存器用名字来访问. CPU 寄存器有好几类, 分别有不同的用处:   1. 通用寄存器:   EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP(这个虽然通用,但很少被用做除了堆栈指针外的用途)      这些32位可以被用作多种用途,但每一个都有"专长". EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器. EBX 是"基地址"(base)寄存器, 在内存寻址时存放基地址. ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器. EDX是...(忘了..哈哈)但它总是被用来放整数除法产生的余数.

浅析VS2010反汇编

China☆狼群 提交于 2020-02-29 07:04:36
第一篇 1. 怎样进行反汇编 在调试的环境下,我们能够很方便地通过反汇编窗体查看程序生成的反汇编信息。 例如以下图所看到的。 记得中断程序的运行,不然看不到反汇编的指令 看一个简单的程序及其生成的汇编指令 #include<stdio.h> #include<windows.h> const long Lenth=5060000/5; int main(){ while(true){ for(long i=0;i<Lenth;i++){ ; } Sleep(10); } } 汇编窗体 2. 预备知识 : 函数调用大家都不陌生,调用者向被调用者传递一些參数,然后运行被调用者的代码,最后被调用者向调用者返回结果,还有大家比較熟悉的一句话。就是函数调用是在栈上发生的,那么在计算机内部究竟是怎样实现的呢? 对于程序,编译器会对其分配一段内存。在逻辑上能够分为代码段。数据段,堆,栈 代码段:保存程序文本。指令指针EIP就是指向代码段。可读可运行不可写 数据段:保存初始化的全局变量和静态变量,可读可写不可运行 BSS:未初始化的全局变量和静态变量 堆(Heap):动态分配内存,向地址增大的方向增长。可读可写可运行 栈(Stack):存放局部变量。函数參数,当前状态。函数调用信息等, 向地址减小的方向增长 。很很重要,可读可写可运行 如图所看到的 寄存器 EAX :累加(Accumulator

32位Intel CPU所含有的寄存器

拈花ヽ惹草 提交于 2020-02-29 06:16:52
4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些 低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄 存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字 节的信息。 寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、 除、输入/输出等操作,它们的使用频率很高; 寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位操作 中,当移多位时,要用CL来指明移位的位数;

计算逆波兰式

允我心安 提交于 2020-02-28 18:37:00
在程序设计中,可能碰到需要对字符串数学表达式求值的问题,常用的方法是解析表达式,生成二叉树,然后进行计算。编译器就是使用这种方法来解析程序中的表达式的。这种方法实现起来有点难度,需要考虑运算符的优先级,括号的配对,堆栈的使用等等。我们正常情况下看到的数学表达式如果用二叉树遍历的话,恰好是中序遍历,故叫做中序表达式。除此之外,还有前序表达式,后序表达式。如:a+b+c(中序),++abc(前序),ab+c+(后序),如果表达式含有×,/,()等就更复杂了。 后缀表达式也称逆波兰表达式 因其使表达式求值变得轻松,所以被普遍使用。 逆波兰式: 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间(如:1+1),所以这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法,称为逆波兰记法,在逆波兰记法中,所有 操作符 置于 操作数 的后面,因此也被称为后缀表示法。示例如下: 中缀表示 逆波兰式 a+b a,b,+ a+(b-c) a,b,c,-,+ a+(b-c)*d a,b,c,-,d,*,+ a+d*(b-c) a,d,b,c,-,*,+ a=1+3 a=1,3 + 逆波兰表达式是一种十分有用的表达式,它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。它的优势在于只用两种简单操作

学习js和jQuery总结

别说谁变了你拦得住时间么 提交于 2020-02-28 07:54:34
数据类型的转换: 1.字符串必须放在引号内 2.字符串的转换有两个标签,string和tostring这两个函数。 3.变量必须使用驼峰形式, 把一个变量转换成字符串:console.log(isChild.toString()); 类型转换 1.除0之外的所有数字,转换为布尔型都为true 2.除“”之外的所有字符,转换为布尔型都为true 3.null和undefined转换为布尔型为false var x=1; console.log(Boolean(x)); 把字符串强制转换成布尔类型了。 算数运算符: 什么是表达式: 将同类型的数据(如常量,变量,函数)用运算符号按一定的规则连接起来,有意义的十字称为表达式。 三元操作符: 语法:条件?执行代码1;执行代码2 说明:可代替简单的if语句,如果条件成立,执行代码1,否则执行代码2 var soce=85; var result=(soce>=60)?"及格":“不及格”; console.log(result); 逻辑操作符: &&与操作符:所有条件都为true返回的也是true,一个条件为false结果为false 如果第一个操作数隐士类型的转换后为true,则返回第二个操作数。 如果第一个操作数隐士类型的转换后为false,则返回第一个操作数结果。 ||或运算符只要有一个条件成立,就为true。 条件语句:; if

为什么sizeof(x ++)不增加x?

╄→尐↘猪︶ㄣ 提交于 2020-02-26 23:36:15
这是在dev c ++窗口中编译的代码: #include <stdio.h> int main() { int x = 5; printf("%d and ", sizeof(x++)); // note 1 printf("%d\n", x); // note 2 return 0; } 我希望在执行 注释1 后 x 为6。 但是,输出为: 4 and 5 谁能解释为什么 音符1 之后 x 不会增加? #1楼 sizeof() 运算符仅给出数据类型的大小,它不评估内部元素。 #2楼 注意 此答案是从重复副本中合并而成的,这解释了延迟日期。 原版的 除了 可变长度数组, sizeof 不会评估其参数。 我们可以从C99标准草案第 6.5.3.4 节 “ sizeof运算符 第 2 段”中看到这一点: sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的括号名称。 大小由操作数的类型确定。 结果是一个整数。 如果操作数的类型是可变长度数组类型,则对操作数求值; 否则,不评估操作数,结果为整数常量。 一个注释( 现已删除 )询问这样的事情是否会在运行时评估: sizeof( char[x++] ) ; 确实可以,像这样的东西也可以工作( 看到他们两个都活着 ): sizeof( char[func()] ) ; 因为它们都是可变长度数组。 虽然

《C# 6.0 本质论》 - 学习笔记

别等时光非礼了梦想. 提交于 2020-02-26 03:21:31
**《C# 6.0 本质论》 ========== ========== ========== [作者] (美) Mark Michaelis (美) Eric Lippert [译者] (中) 周靖 庞燕 [出版] 人民邮电出版社 [版次] 2017年02月 第5版 [印次] 2017年02月 第1次 印刷 [定价] 108.00元 ========== ========== ========== 【前言】 成功学习 C# 的关键在于,要尽可能快地开始编程。不要等自己成为一名理论方面的 “专家” 之后,才开始写代码。 学习一门计算机语言最好的方法就是在动手中学习,而不是等熟知了它的所有 “理论” 之后再动手。 为了从简单程序过渡到企业级开发, C# 开发者必须熟练地从对象及其关系的角度来思考问题。 一名知道语法的程序员和一名能因时宜地写出最高效代码的专家的区别,关键就是这些编码规范。专家不仅让代码通过编译,还遵循最佳实践,降低产生 bug 的概率,并使代码的维护变得更容易。编码规范强调了一些关键原则,开发时务必注意。 总地说来,软件工程的宗旨就是对复杂性进行管理。 【第01章】 (P001) 学习新语言最好的办法就是动手写代码。 (P003) 一次成功的 C# 编译生成的肯定是程序集,无论它是程序还是库。 在 Java 中,文件名必须和类名一致。 从 C# 2.0 开始

Java字节码指令集的使用详细

ε祈祈猫儿з 提交于 2020-02-25 19:55:27
本篇文章对Java字节码指令集的使用进行了详细的介绍。需要的朋友参考下 Java虚拟机指令由一个字节长度的、代表某种特定含义的操作码(Opcode)以及其后的零个至多个代表此操作参数的操作数构成。虚拟机中许多指令并不包含操作数,只有一个操作码。若忽略异常,JVM解释器使用一下为代码即可有效工作。 复制代码 代码如下: do{ 自动计算PC寄存器以及从PC寄存器的位置取出操作码 if(存在操作数) 取出操作数; 执行操作码所定义的操作; }while(处理下一次循环) 操作数的数量以及长度,取决于操作码,若一个操作数长度超过了一个字节,将会以Big-Endian顺序存储(高位在前字节码),其值应为(byte1<<8)|byte2。 字节码指令流是单字节对齐,只有"tableswitch"和"lookupswitch"两指令例外,它们的操作数比较特殊,以4字节为界限划分的,需要预留出相应的空位来实现对齐。 限制Java虚拟机操作码的长度为一个字节,且放弃编译后代码的参数长度对齐,是为了获得短小精干的编译代码,即使可能会让JVM实现付出一定性能成本为代价。由于操作码只能有一个字节长度,故限制了指令集的数量,又没有假设数据是对齐好的,意味着数据超过一个字节时,不得不从字节中重建出具体的数据结构,会损失一些性能。 数据类型与Java虚拟机 在JVM中的指令集中

PHP基础加固4——数据类型2

点点圈 提交于 2020-02-20 07:59:41
本节介绍PHP的其他数据类型。包括数组、对象、Resource以及NULL等等数据类型,也涵盖了不同数据类型之间的转换等知识点。 Array数组 PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。 1. 语法 定义数组 array() 可以用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。 array( key => value , ... ) // 键(key)可是是一个整数 integer 或字符串 string // 值(value)可以是任意类型的值 最后一个数组单元之后的逗号可以省略。通常用于单行数组定义中,例如常用 array(1, 2) 而不是 array(1, 2, )。对多行数组定义通常保留最后一个逗号,这样要添加一个新单元时更方便。 5.4 起可以使用短数组定义语法,用 [] 替代 array()。 <?php $array = array( "foo" => "bar", "bar" => "foo", ); // 自 PHP 5.4 起 $array = [