操作数

js之类型转换

不羁的心 提交于 2019-12-05 17:23:31
区别:   相等和不相等——先转换再比较 (==)   全等和不全等——仅比较而不转换 (===) 规则:  在转换不同的数据类型时,对于相等和不相等操作符:在JS高程中一书中给出如下的基本转换规则:   ①、如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1;   ②、如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值   ③、如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值,如果没有得到基本数据类型值就会调用toString按照前面的规则进行比较 这两个操作符在进行比较时则要遵循下列规则。   ①、null 和undefined 是相等的   ②、要比较相等性之前,不能将null 和 undefined 转换成其他任何值   ③、如果有一个操作数是NaN,则相等操作符返回 false ,而不相等操作符返回 true。重要提示:即使两个操作数都是NaN,相等操作符也返回 false了;因为按照规则, NaN 不等于 NaN   ④、如果两个操作数都是对象,则比较它们是不是同一个对象,如果两个操作数都指向同一个对象,则相等操作符返回 true;否则, 返回false 举个经典的栗子解释一下: [ ] == ![ ]; !可将变量转换成boolean类型

CPU子系统

谁都会走 提交于 2019-12-05 07:16:05
CPU的基本结构: CPU的主要部件: ​ 运算部件、缓存部件、寄存器、控制器、时序部件 CPU的工作原理: ​ 主要功能:处理指令、执行操作、控制时间、数据运算 ​ 执行指令的流程:读取指令、指令译码、指令执行、后续工作 部件的控制方式: ​ 同步控制方式:每步操作都向统一的外部时序信号对齐,每步操作之间无交互; ​ 异步控制方式:每步操作都不需向统一的外部时序信号对齐,每步操作之间通过交互应答来实现协同; 外部连接与I/O控制任务 指令系统: 设计CPU的一般过程: ​ 指令系统 --- 数据通路 --- 控制器 --- CPU定型 指令可能会涉及到的操作数类型: ​ 地址码数据:寄存器编号或者存储器地址,无符号整数. ​ 数值型数据:定点数、浮点数等,一般用补码表示; ​ 字符型数据:通常表示为ASCII码/汉字内码格式; ​ 逻辑型数据:常规二进制代码,不具有数值含义。 指令中的寻址方式: ​ 立即寻址: ​ 直接寻址: ​ 寄存器直接寻址: ​ 间接寻址(寄存器间接寻址、堆栈间接寻址): ​ 变址、基址寻址及其变化: ​ 基址寻址: ​ 基址 + 变址: ​ PC相对寻址: ​ 页面寻址(伪直接寻址): 设计传送指令时需要考虑: ​ 规定传送范围、指明传送单位、设置寻址方式 算数、逻辑运算指令: ​ 算数运算指令:设计时需要考虑操作数类型、符号、进制等

Python运算符

大城市里の小女人 提交于 2019-12-05 06:36:29
本文链接: https://www.cnblogs.com/zyuanlbj/p/11910980.html 算术运算符 +   -   *   /   %   **   // 示例: a=9 b=2 result = a * b print('乘法运算:',result) result = a / b print('除法运算:',result) b=3 result = a ** b # b=2 8*8=64 8*8*8 =512 a的b次幂 print('乘法运算:',result) b=2 result = a // b # 整除 9/2 =4.5 取整:4 print('除法运算:',result) result = a%b # 9%2= 1 print('取余数运算:',result) 赋值运算符 =   -=   +=   *=   /= 赋值运算符左边必须是变量。 从右向左算。 没有赋值表达式。 所有赋值运算符优先级相同,赋值运算符优先级非常低,仅高于成员运算符和身份运算符、逻辑运算符。 注意在复合赋值中。 示例: # 1. = name = 'admin' # 将'admin'的值赋给 变量name name1 = name print(id(name), name) print(id(name1), name1) name2 = name print(id

C++入门到理解阶段二基础篇(4)——C++运算符

隐身守侯 提交于 2019-12-05 04:30:50
目录 算术运算符(进行四则运算) 赋值运算符(表达式的值赋给变量) 比较运算符(表达是比较,返回一个真值或假值) 逻辑运算符(返回表格式的结果真或假) 位运算符 杂项运算符 C++ 中的运算符优先级 算术运算符(进行四则运算) 下表显示了 C++ 支持的算术运算符。 假设变量 A 的值为 10,变量 B 的值为 20,则: 运算符 描述 实例 + 把两个操作数相加 A + B 将得到 30 - 从第一个操作数中减去第二个操作数 A - B 将得到 -10 * 把两个操作数相乘 A * B 将得到 200 / 分子除以分母(两个整数相除结果还是整数,不保留小数) B / A 将得到 2 % 取模运算符,整除后的余数 B % A 将得到 0 ++ 自增运算符 ,整数值增加 1 A++ 将得到 11 -- 自减运算符 ,整数值减少 1 A-- 将得到 9 赋值运算符(表达式的值赋给变量) 下表列出了 C++ 支持的赋值运算符: 运算符 描述 实例 = 简单的赋值运算符,把右边操作数的值赋给左边操作数 C = A + B 将把 A + B 的值赋给 C += 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C += A 相当于 C = C + A -= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 C -= A 相当于 C = C - A *=

深入理解java虚拟机(5):字节码指令简介

限于喜欢 提交于 2019-12-05 03:02:54
java虚拟机的指令由一个字节构成,由于class文件格式放弃了编译后代码的操作数长度对齐,所以虚拟机处理超过一个字节数据的时候不得不在运行时重建具体数据的结构。java虚拟机的执行模型如下 大部分与数据相关的字节码指令,他们的操作码助记符中都有特殊字符来表明他们是为哪类数据服务的,i表示int,f表示float,l表示long,b表示byte,c表示char,d表示double ,a表示reference,也有指令没有代表数据类型的特殊字符入arraylength。 以上字节码操作可以分为9大类: 1、加载和存储指令 加载和存储指令用于将数据在栈帧和操作数栈之间来回传输。包括如下指令 以上以尖括号结尾的,操作数就隐含在操作指令中 来源: https://www.cnblogs.com/xiaofeiyang/p/11900620.html

C++ operator关键字(重载操作符)

十年热恋 提交于 2019-12-04 22:26:27
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。 一、为什么使用操作符重载? 对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,等等,则需要用户自己来定义关于这个操作符的具体实现。比如,判断两个人是否一样大,我们默认的规则是按照其年龄来比较,所以,在设计person 这个class的时候,我们需要考虑操作符==,而且,根据刚才的分析,比较的依据应该是age。那么为什么叫重载呢?这是因为,在编译器实现的时候,已经为我们提供了这个操作符的基本数据类型实现版本,但是现在他的操作数变成了用户定义的数据类型class,所以,需要用户自己来提供该参数版本的实现。 二、如何声明一个重载的操作符? A: 操作符重载实现为类成员函数 重载的操作符在类体中被声明,声明方式如同普通成员函数一样,只不过他的名字包含关键字operator,以及紧跟其后的一个c++预定义的操作符。 可以用如下的方式来声明一个预定义的==操作符: class person

转--C++ operator关键字(重载操作符)

好久不见. 提交于 2019-12-04 22:26:18
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解: 一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。 一、为什么使用操作符重载? 对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,等等,则需要用户自己来定义关于这个操作符的具体实现。比如,判断两个人是否一样大,我们默认的规则是按照其年龄来比较,所以,在设计person 这个class的时候,我们需要考虑操作符==,而且,根据刚才的分析,比较的依据应该是age。 那么为什么叫重载呢?这是因为,在编译器实现的时候,已经为我们提供了这个操作符的基本数据类型实现版本,但是现在他的操作数变成了用户定义的数据类型class,所以,需要用户自己来提供该参数版本的实现。 二、如何声明一个重载的操作符? A: 操作符重载实现为类成员函数 重载的操作符在类体中被声明,声明方式如同普通成员函数一样,只不过他的名字包含关键字operator,以及紧跟其后的一个c++预定义的操作符。 可以用如下的方式来声明一个预定义的==操作符: 复制代码 class

JVM 栈和栈帧

冷暖自知 提交于 2019-12-04 20:10:38
前情提要 对于没有深度递归的函数来说,无需担心 上篇文章 中的算法。当知道正在处理数据集有限时,我会使用这种简单的基本递归形式。由于你并不知道在应用程序中会处理多少数据,因此确保你的递归算法是 尾递归(tail-recursive) 就变得十分重要,否则你将可能遇到讨厌的 StackOverflowError . 举个例子,如果你用一个较大的list来运行上文中的sum函数,将出现 StackOverflowError ,这与我们开发出稳定、出色的函数式程序相悖。 object RecursiveSum extends App { def sum(list: List[Int]): Int = list match { case Nil => 0 case x :: xs => x + sum(xs) } val list = List.range(1, 10000) // MUCH MORE DATA val x = sum(list) println(x) } 具体到底需要多少数字才能引发 StackOverflowError,这取决于JVM的设置。Java默认的Stack大小是1024kb,这是非常小的内存。 关于尾递归,下篇文章我会继续讲解,本文我想讨论下JVM Stack 和 Stack frames。如果你不熟悉这些概念,本文有助于你理解,同时有益于debug

Java虚拟机-字节码指令

北战南征 提交于 2019-12-04 19:45:41
目录 字节码指令 字节码与数据类型 加载和存储指令 运算指令 类型转换指令 对象创建与访问指令 操作数栈管理指令 控制转移指令 方法调用和返回指令 异常处理指令 同步指令 字节码指令 Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)构成。Java虚拟机采用面向操作数栈而不是面向寄存器的架构,所以大多数指令都不包含操作数,只有一个操作码。 Java虚拟机操作码长度限制为一个字节(0-255),并且Class文件格式放弃类编译后代码的操作数长度对齐。所以虚拟机处理那些超过一个字节数据的时候,不得不在运行时从字节中重建出具体的数据的结构。这种操作会导致解释执行字节码时损失一些性能,但是这样意味着节省很多填充和间隔符号,编译代码也更加短小精干。这也是因为Java最初设计是面向网络、智能家电的技术背景,并且一直沿用至今。现在的网络带宽相比几十年前已经扩宽了很多倍,本地的计算性能也提高了无数倍。那现在这个思想是否还需要继续保持呢?在56k拨号上网、386的时代Java虚拟机针对编译时的优化或许决定了应用的成败,但是在现在5G和16甚至32核服务器以及Java虚拟机自身的发展与优化,常见的问题主要就是OOM了。 字节码与数据类型 Java虚拟机的指令集中

sizeof、strlen之一

半腔热情 提交于 2019-12-04 18:44:43
解析C/C++语言中的sizeof 一、sizeof的概念   sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法   1、用于数据类型   sizeof使用形式:sizeof(type)   数据类型必须用括号括住。如sizeof(int)。   2、用于变量   sizeof使用形式:sizeof(var_name)或sizeof var_name   变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。   注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。   如sizeof(max)若此时变量max定义为int max(),sizeof(char_v) 若此时char_v定义为char char_v [MAX]且MAX未知,sizeof(void)都不是正确形式。 三、sizeof的结果    sizeof 操作符的结果类型是size_t