所有栏目

操作符

作者:教育百科书

指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。不同的指令用操作符这个字段的不同编码来表示,每一种编码代表一种指令。

操作符基本特性

操作符语义

每个操作符都有自己的语义,具体取决于它所操作的类型。

操作符优先级

每个操作符都有优先级。

操作符结合性

每个操作符都有结合性。操作符的结合性定义了操作符对操作数执行操作的顺序,例如:右结合性表示该操作符对其操作数从右向左执行操作。

操作符操作符分类

指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。不同的指令用操作符这个字段的不同编码来表示,每一种编码代表一种指令。组成操作符字段的位数一般取决于计算机指令系统的规模。

1.java操作符

2.c语言操作符

3.c++操作符

4.c#操作符

5.perl操作符

6.python操作符

7.javascript操作符

8.位操作符

9.布尔操作符

10.作用域操作符

11.一元操作符

12.二元操作符

13.三元操作符

操作符重载操作符

以下以操作符+为例说明:

用户定义的类型,如:字符串,日期,复数,联合体以及文件常常重载,二元操作符以实现对象的连接,附加或合并机制。但是要正确实现操作符会给设计,实现和性能带来一定的挑战 。

内建的 操作符有两个类型相同的操作数,相加并返回右值 6,然后被赋值给 x。我们可以断定内建的是一个二元的,对称的,可交换的操作符。它产生的结果的类型与其操作数类型相同。按照这个规测,当你为某个用户定义类型重载操作符时,也应该遵循相应内建操作符的特征。

下面我们就来分析内建操作符的特征并尝试模仿其相应的重载机制。

第一步:在成员函数和非成员函数之间选择

你可以用类成员函数的方式实现二元操作符如:+、- 以及 ==,例如:class String {public: bool operator==(const String & s); // 比较 *this 和 s};

这个方法是有问题的。相对于其内建的操作符来说,重载的操作符在这里不具有对称性;它的两个参数一个类型为:const String * const(这个参数是隐含的),另一个类型为:const String &。因此,一些 STL 算法和容器将无法正确处理这样的对象。

另外一个可选方法是把重载操作符 + 定义为一个外部(extern)函数,该函数带两个类型相同的参数:

String operator + (const String & s1, const String s2);

这样一来,类 String 必须将该重载操作符声明为友元:

class String{public: friend String operator+(const String& s1,const String&s2);};

第二步:返回值的两难选择

如前所述,内建操作符 + 返回右值,其类型与操作数相同。但是在调用者堆栈里返回一个对象效率很低,处理大型对象时尤其如此。那么能不能返回一个指针或引用呢?答案是不行。因为返回指针破坏参数类型与返回值类型应该相同的规则。更糟的是,链接多个表达式将成为不可能:

String s1,s2,s3; String res;res=s1+s2+s3; // 不可能用 String* 作为返回值

虽然有一个办法可以定义额外的 + 操作符重载版本,但这个办法是我们不希望用的,因为返回的指针必须指向动态分配的对象。这样的话,如果调用者释放(delete)返回的指针失败,那么将导致内存泄漏。显然,返回 String* 不是一个好主意。

那么返回 String& 好不好呢?返回的引用必须一定要是一个有效的 String。它避免了使用动态对象分配,该方法返回的是一个本地静态对象的引用。静态对象确实解决了内存泄漏问题,但这个方法的可行性仍然值得怀疑。在一个多线程应用中,两个线程可能会并发调用 + 操作符,因此造成 String 对象的混乱。而且,因为静态对象总是保留其调用前的状态,所以有必要针对每次 + 操作符的调用都清除该静态 String 对象。由此看来,在堆栈上返回结果仍然是最安全和最简单的解决方案。

操作符SQL操作符

操作符比较操作符

相等:相等操作符在SQL语句里比较一个值与另一个值,等号(=)表示相等。在进行相等比较时,被比较的值必须完全匹配,否则就不会返回数据。如果在相等比较过程中两个值相等,那么这个比较的返回值就是true,否则就是false。这个布尔值(true或false)用于决定是否返回数据。

不相等:在SQL里表示不相等的操作符是<>(一个小于号和一个大于号)。如果两个值不相等,条件就返回true,否则就返回false。另一种表示不相等的方式是!=,而且很多主要的SQL实现采用这种方式。

小于:<

大于:>

比较操作符的组合:等号可以与小于号和大于号联合使用。

操作符逻辑操作符

用户对SQL关键字而不是符号进行比较。

is null:这个操作符用于与null值进行比较。

between:操作符between用于寻找位于一个给定最大值和最小值之间的值,这个最大值和最小值是包含在内的。between是包含边界值的,所以查询结果里会包含指定的最大值和最小值。

in:操作符in用于把一个值与一个指定列表进行比较,当被比较的值至少与列表中一个值相匹配时,它会返回true。使用操作符in可以得到操作符or一样的结果,但它的速度更快。

like:操作符like利用通配符把一个值与类似的值进行比较,通配符有两个:百分号(%);下划线(_)。百分号代表零个、一个或多个字符;下划线( _ )代表一个数字或字符。

exists:这个操作符用于搜索指定表里是否存在满足特定条件的记录。

all:操作符all用于把一个值与另一个集合里全部值进行比较。

any/some:操作符any用于把一个值与另一个列表里任意值进行比较。some是any的别名,它们可以互换使用。

操作符连接操作符

如果想在SQL语句里利用多个条件来缩小数据范围,我们就需要组合多个条件。这正是连接操作符的功能。

and:操作符and让我们可以在一条SQL语句的where子句里使用多个条件。在使用and时,无论SQL语句是事务操作还是查询,所有由and连接的条件都必须为true,SQL语句才会实际执行。

or:操作符or可以在SQL语句的where子句中连接多个条件,这时无论SQL语句是事务操作还是查询,只要or连接的条件里有至少一个是true,SQl语句就会执行。

注意:比较操作符和逻辑操作符都可以单独或彼此复合使用。

提示:当SQL语句里包含多个条件和操作符时,利用圆括号把语句按照逻辑关系进行划分可以提高语句的可读性。当然,不恰当地使用圆括号也会影响输出结果。

操作符求反操作符

操作符not可以颠倒逻辑操作符的含义,它可以与其他操作符构成以下几种形式:

not equal:不相等

not between:操作符between的求反

not in:操作符in的求反

not like:操作符like的求反

is not null:操作符is null的求反

not exists:操作符exists的求反

not unique:操作符distinct的求反

操作符算术操作符

加法(+)

减法(-)

乘法(*)

除法(/)

算术操作符可以彼此组合使用,并且遵循基本算数运算中的优先级:首先执行乘法和除法,然后是加法和减法。用户控制算术运算次序的唯一方式是使用圆括号,圆括号里包含的表达式会被当作一个整体进行优先求值。

热点导航
教育资讯 知道问答 公考资讯 司法考试 建筑知识 工作范文 大学排名 报考专业 学习方法 句子美文 秒知回答 作业解答 精选答案 知途问学