操作数

汇编

青春壹個敷衍的年華 提交于 2020-04-06 22:00:40
一、介绍 汇编语言是一种面向机器的低级程序设计语言 汇编语言以助记符形式表示每一条计算机指令 助记符是便于人们记忆、并能描述指令功能和指令操作数的符号 助记符一般就是表明指令功能的英语单词或其缩写 MOV AX , 30H ADD AX , 50H MOV [2100H] , BX HLT 汇编语言的主要特点: 汇编语言程序与处理器指令系统密切相关 程序员可直接、有效的控制硬件系统 形成的可执行文件运行速度快、占用主存容量少 汇编语言程序中可以出现不同进制的数,但一定要有标识字母加以区别 数据的组织形式:位(bit)、字节(Byte)、字(Word)、双字(Dword) 无论是数据还是指令在计算机中都是以二进制形式存放的 无符号整数——所有有效位都当作数值处理,当然这样的数全部都是正数,故不保留符号位,常用于表示地址,或运算中表示计数值等 ASCII编码——在内存中使用一个字节(8位二进制数)存放一个字符(它的ASCII码),最高位没用(写0).在通信过程中最高位有时用于奇偶校验 数码0~9:30H~39H 大写字母A~Z:41H~5AH 小写字母a~z:61H~7AH 空格:20H 带符号数的表示方法——采用补码表示法(补码存储、补码运算) 与、或、异或、非运算 二、计算机硬件相关知识 1、硬件 中央处理单元CPU 控制器、运算器、寄存器 存储器 主存储器:RAM和ROM

经典的Java基础面试题集锦

只愿长相守 提交于 2020-04-03 05:26:51
问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”。 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝。 问题:如果要重写一个对象的equals方法,还要考虑什么? 答案:hashCode。 问题:Java的”一次编写,处处运行”是如何实现的? 答案:Java程序会被编译成字节码组成的class文件,这些字节码可以运行在任何平台,因此Java是平台独立的。 问题:说明一下public static void main(String args[])这段声明里每个关键字的作用 答案:public: main方法是Java程序运行时调用的第一个方法,因此它必须对Java环境可见。所以可见性设置为pulic. static: Java平台调用这个方法时不会创建这个类的一个实例,因此这个方法必须声明为static。 void: main方法没有返回值。 String是命令行传进参数的类型,args是指命令行传进的字符串数组。 问题:==与equals的区别 答案:==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 . ==比较的是引用而equals方法比较的是内容

Java 面试题基础概念收集

感情迁移 提交于 2020-04-03 05:25:32
问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”。 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝。 问题:如果要重写一个对象的equals方法,还要考虑什么? 答案:hashCode。 问题:Java的”一次编写,处处运行”是如何实现的? 答案:Java程序会被编译成字节码组成的class文件,这些字节码可以运行在任何平台,因此Java是平台独立的。 问题:说明一下public static void main(String args[])这段声明里每个关键字的作用 答案:public: main方法是Java程序运行时调用的第一个方法,因此它必须对Java环境可见。所以可见性设置为pulic. static: Java平台调用这个方法时不会创建这个类的一个实例,因此这个方法必须声明为static。 void: main方法没有返回值。 String是命令行传进参数的类型,args是指命令行传进的字符串数组。 问题:==与equals的区别 答案:==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 . ==比较的是引用而equals方法比较的是内容

C语言运算符优先级说明

佐手、 提交于 2020-04-02 09:22:58
下面按优先级从高到低的顺序总结一下各种运算符,每一条所列的各运算符具有相同的优先 级,对于同一优先级的多个运算符按什么顺序计算也有说明,双目运算符就简单地用“左结 合”或“右结合”来说明了。和指针有关的运算符* & ->也在这里列出来了,以后再详细解释。 1 、标识符、常量、字符串和用()括号套起来的表达式是组成表达式的最基本单元,在运算中做 操作数,优先级最高。 2、后缀运算符,包括数组取下标[]、函数调用()、结构体取成员.、指向结构体的指针取成员- >、后缀自增++、后缀自减--。如果一个操作数后面有多个后缀,按照离操作数从近到远的顺序 (也就是从左到右)依次运算,比如a.name++,先算a.name,再++,这里的.name应该看成a的 一个后缀,而不是把. 看成双目运算符。 3、单目运算符,包括前缀自增++、前缀自减--、 sizeof、类型转换()、取地址运算&、指针间接 寻址*、正号+、负号-、按位取反~、逻辑非! 。如果一个操作数前面有多个前缀,按照离操作数 从近到远的顺序(也就是从右到左)依次运算,比如!~a,先算~a,再求!。 4、乘*、除/、模%运算符。这三个运算符是左结合的。 5、加+、减-运算符。左结合。 6、移位运算符<<和>>。左结合。 7、关系运算符< > <= >=。左结合。 8、相等性运算符==和!=。左结合。 9、按位与&。左结合。 10

位运算符

徘徊边缘 提交于 2020-03-30 06:24:32
位运算符分析 C语言中位运算符直接对bit位进行操作,其效率最高。 注意点: 左操作数必须为整数类型 char和short被隐式转换为int后进行移位操作 右操作数的范围必须为:[0-31] 左移运算符 << 将运算数的二进制左移 规则:高位丢弃,低位补0 右移运算符 >> 把运算数的二进制位右移 规则:高位补符号位,低位丢弃 一个有趣的问题 0x1 << 2 + 3 的值会是什么? 例子1:位操作符的使用 #include<stdio.h> int main() { printf("%d\n",3<<2); // 12 printf("%d\n",3>>2); // 0 printf("%d\n",0x1 << 2 +3); // 32 printf("%d\n",-1>>1); // -1 printf("%d\n",3 << -1); // 不同的编译器结果不一样,gcc 1 return 0; } 防错准则: 避免位运算符、逻辑运算符和数学运算符同时出现在一个表达式中 当位运算符,逻辑运算符和数学运算符需要同时参与运算时,尽量使用括号来表达计算顺序 小tip: 左移n位相当于乘以2的n次方,但效率比数学运算高 右移n位相当于除以2的n次方,但效率比数学运算高 交换两个变量的值 #include<stdio.h> #define SWAP(a,b)\ {\ int temp

雷林鹏分享:Java快速入门-Java是什么

左心房为你撑大大i 提交于 2020-03-26 16:02:42
  Java 是什么?   Java 的特点:   面向对象   平台无关(跨平台):   简单   安全   体系结构 - 中性   可移植   健壮   多线程   解释型   高性能   分布式   动态   Java安装及环境设置:   java的安装及环境配置可以看java开发环境配置章节。   Java 基础语法   对象 - 对象有状态和行为。例如:狗有状态色,名字,品种以及行为 - 摇头晃脑,吠叫,吃。对象是类的一个实例。   类 - 类可以被定义为一个模板/蓝本描述该行为/状态及其支持对象类型。   方法 - 方法基本上是一个行为。一个类可以包含(拥有)多个方法。 将逻辑写入方法,数据操纵和所有的动作都会被执行。   实例变量 - 每个对象都有其独特(唯一)的实例变量。对象的状态是由分配给这些瞬间变量的值来创建。   第一个Java程序:   让我们来看看,以下代码将打印一个简单词语 Hello World   public class MyFirstJavaProgram{   /* This is my first java program.   * This will print 'Hello World' as the output   */   public static void main(String []args){   System.out

C++ Primer 有感(重载操作符)

▼魔方 西西 提交于 2020-03-25 09:20:00
1.用于内置类型的操作符,其含义不能改变。也不能为任何内置类型定义额外的新的操作符。(重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义) 2.重载操作符,操作符的优先级、结合性或操作数数目不能改变。 注意:重载操作符时使用默认实参是非法的 。 3.重载操作符并不保证操作数的求值顺序,不再具备短路求值特性。 4.作为类成员的重载函数,其形参看起来比操作数数目少1。作为成员函数的操作符有一个隐含的this形参,限定为第一个操作数。( 重载一元操作符如果作为成员函数就没有(显式)形参,如果作为非成员函数就有一个形参。类似的,重载二元操作符定义为成员时有一个形参,定义为非成员函数时有两个形参 ) 5.重载逗号、取地址、逻辑与、逻辑或等操作符通常不是好做法。这些操作符具有有用的内置含义,如果我们定义了自己的版本,就不能再使用这些内置含义。 6. 将要用作关联容器键类型的类定义<操作符。关联容器默认使用键类型的<操作符。即使该类型将只存储在顺序容器中,类通常也应该定义相等(==)操作符和小于(<)操作符,理由是许多算法假定这些操作符存在。如果类定义了相等操作符,它也应该定义不等操作符!=。 7.为类设计存在操作符的时候,是将操作符设置为类成员还是普通黑成员函数。下面是一些指导原则

java运算符

南笙酒味 提交于 2020-03-24 06:44:24
一、算术运算符 算术运算符主要用于进行基本的算术运算,如加法、减法、乘法、除法等。 Java 中常用的算术运算符: 其中, ++ 和 -- 既可以出现在操作数的左边,也可以出现在右边,但结果是不同的 例1: 运行结果: 例2: 运行结果: 一定要注意哦!自增和自减运算符 只能用于操作变量 ,不能直接用于操作数值或常量!例如 5++ 、 8-- 等写法都是错误的! 在不参与运算时,++、--放在前后都一样 int a = 3; int b = 3; a++; --b; //不参与运算,都是自增1或者自减1 System.out.println(a); System.out.println(b); //a=4,b=2 例子: int a = 3; int b; b = a++ + 10;//加号在后,运算中无效,++,--运算符后置时,先使用变量a原有值参与运算操作,运算操作完成后,变量a的值自增1; System.out.println(a); //a=4 System.out.println(b); //b=13 int a = 3; int b; b = ++a + 10;//加号在前,运算中生效,++,--运算符前置时,先将变量a的值自增1或者自减1,然后使用更新后的新值参与运算操作。 System.out.println(a); //a=4 System.out

20145205 《信息安全系统设计基础》第5周学习总结

喜你入骨 提交于 2020-03-23 03:17:00
教材学习内容总结 程序编码 GCC将源代码转化为可执行代码的步骤: C预处理器——扩展源代码-生成.i文件 编译器——产生两个源代码的汇编代码-——生成.s文件 汇编器——将汇编代码转化成二进制目标代码——生成.o文件 链接器——产生可执行代码文件 机器级代码 1.机器级编程的两种抽象 (1)指令集结构ISA 是机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响。 (2)机器级程序使用的存储器地址是虚拟地址 看上去是一个非常大的字节数组,实际上是将多个硬件存储器和操作系统软件组合起来。 2.几个处理器: 程序计数器(CS:IP) 整数寄存器(AX,BX,CX,DX) 条件码寄存器(OF,SF,ZF,AF,PF,CF) 浮点寄存器 一条机器指令只执行一个非常基本的操作。 程序编码 书上107页的代码,需要用到反汇编器。在Linux系统中,带‘d’命令行标志的程序OBJDUMP可以充当这个角色。 数据格式 数据传送指令的三个变种: movb 传送字节 movw 传送字 movl 传送双字 访问信息 一个IA32中央处理单元(CPU)包含8个存储32位置的寄存器 操作数指示符 立即数 寄存器 存储器 寻址方式 (1)立即数寻址方式 格式:$后加用标准c表示法表示的整数,如 $0xAFF (2)寄存器寻址方式 如%eax,与汇编中学过的AX寄存器类比。 (3

JavaScript: 自动类型转换

人走茶凉 提交于 2020-03-23 03:01:42
我们都知道,JavaScript是类型松散型语言,在声明一个变量时,我们是无法明确声明其类型的,变量的类型是根据其实际值来决定的,而且在运行期间,我们可以随时改变这个变量的值和类型,另外,变量在运行期间参与运算时,在不同的运算环境中,也会进行相应的自动类型转换。 自动类型转换一般是根 运行环境 和 操作符 联系在一起的,是一种隐式转换,看似难以捉摸,其实是有一定规律性的,大体可以划分为: 转换为字符串类型 、 转换为布尔类型 、 转换为数字类型 。今天我们就介绍一下这几种转换机制。 1. 转换为字符串类型(to string) 当 加号“+”作为二元操作符(binary) 并且 其中一个操作数为字符串类型 时,另一个操作数将会被无条件转为字符串类型: // 基础类型 var foo = 3 + ''; // "3" var foo = true + ''; // "true" var foo = undefined + ''; // "undefined" var foo = null + ''; // "null" // 复合类型 var foo = [1, 2, 3] + ''; // "1,2,3" var foo = {} + ''; // "[object Object]" // 重写valueOf()和toString() var o = { valueOf: