C# 操作符之二 算数操作符

赋值运算符也有和算数操作符所结合的用法之前附录中有提及,用法是:比如要将x加上4,然后再赋值给x,就可以写成x+=4.

代码如下:

public class MathOps{
public static void main(String [] args){
Random rand=new Random(47);
int i,j,k;
j=rand.nextInf(100)+1;
System.out.println("j:"+j);
k=rand.nextInt(100)+1;
System.out.println("k:"+k);
i=j-k;
System.out.println("j-k:"+i);
i=k/j;
System.out.println("k/j:"+i);
i=k*j;
System.out.println("k*j:"+i);
j%=k;
System.out.println("i%=k:"+j);
float u,v,w;
v=rand.nextFloat();
System.out.println("v:"+v);
w=rand.nextFloat();
System.out.println("w:"+w);
u=v+w;
System.out.printlln("v+w:"+u);
u=v-w;
System.out.println("v-w:"+u);
u=v*w;
System.out,print("v*w"+u);
u=v/w;
System.out.print("v/w:"+u);
u+=v;
System.out.print("u+=v:"+u);
u-=v;
System.out.print("u-=v:"+u);
u*=v;
System.out.print("u*=v:"+u);
u/=v;
System.out.print("u/=v:"+u);
}
}

输出:
j:59;
k:56;
j+k:115;
j-k:3;
k/j:0;
k*j:3304;
k%j:56;
j%=k:3;
v:0.5309454;
w:0.0534122
v+w:0.5843576
v-w:0.47753322
v*w:0.028358962
v/w:9.94025
u+=v:10.471473
u-=v:9.940527
u*=v:5.2778773
u/=v:9.940527
通过Random类的对象,程序可以生成许多不同类型的随机数字。做法很简单,只需要调用方法nextInt()和nextFloat()即可(或nextLong()或者nextDouble())。传递给nextInt()的参数设置了所产生的随机数的上限,而其下线为0,但是这个下线并不是我们想要的,因为他会产生除0的可能性,所以做了+1的操作。
一元操作符中编译器会自动判断+,-号的作用
比如:x=a*-b;编译器可以编译其含义b前-号是负号但为了避免读者混淆最佳的写法是
x=a*(-b)
一元减号用于转变数据的符号,而一元加号只是为了与一元减号相对应,但是它唯一的作用仅仅是将较小类型的操作数提升为int;
算术操作符



























Operator

Use

Description

+

op1 + op2

返回op1和op2的和

-

op1 - op2

返回op1和op2的差

*

op1 * op2

返回op1和op2的积

/

op1 / op2

返回op1除以op2的商

%

op1 % op2

返回op1除以 op2的余数

自动递增和递减
Java中提供的打量快捷运算中递增和递减运算时两种相当不错又快捷的运算(通常被称为"自动递增"和"自动递减"运算)。其中,递减操作符是"--",意私事减少一个单位,递增是"++"意思是增加一个单位
++a等价于a=a+1递减亦同
递增,递减又分为"前缀式"和"后缀式"。
对于前缀式:++a,--a,会先执行运算,再生成值。而对于后缀式a++,a--,会先生成值,在执行运算。


代码如下:

public class AutoInc{
public static void main(String [] args){
int i=1;
System.out.println("i:"+1);
System.out.println("++i:"+ ++i);
System.out.println("i++:"+ i++);
System.out.println("—i:"+ --i);
System.out.println("i--:" + i--);
}
}

输出
i:1
++i:2
i++:2
--i:1
i--:1
从上面这个例子中可以看书前缀式和后缀式的区别
递增操作符正是c++这个名字的一种解释,"超越c一步"
关系操作符
关系操作符主要生成的的是一个boolean布尔结果,他们比较值之间的结果如果为真返回true,如果为假则返回false,关系操作符包括<,>,<=,>=,==,!=(不等于),等于和不等于适合于所有基本数据类型,而其他的操作符不适合对boolean值的操作,因为true和false两个之间不存在大于或小于的关系


代码如下:

public class Equivalence{
public static void main(String [] arg){
Integer n1=new Integer(47);
Integer n2=new Integer(47);
System.out.println(n1==n2);
System.out.println(n1!=n2);
}
}

输出
false
true
结果可能会跟你想的不一样,在这里尽管对象内容相同,但是对象的引用是不同的,而==和!=比较的是对象的引用,而不是内容。
如果相比较两对象的实际内容是否相同的话要怎么做?需要使用所有对象都适用的equals()方法。但这个方法不适用于基本类型,基本类型直接使用==,!=即可


代码如下:

public class EqualMethod{
public static void main(String [] args){
Integer n1=new Integer(47);
Interger n2=new Integer(47);
System.out.println(n1.equals(n2));
}
}

输出
true
但是如果引用的对象是自己创建的类,结果又会有不同


代码如下:

class Value{
int i;
}
public class EqualsMethod2{
public static void main(String [] args){
Value v1=new Value();
Value v2=new Value();
v1.i=v2.i=100;
System.out.println(v1.equals(v2));
}
}

输出
false
结果又是false,这是由于equals的默认其实是比较引用。所以除非在自己的新类中重写equals方法、否则是不能达到我们预期的效果的。
关系操作符































Operator

Use

Description

>

op1 > op2

当op1 大于op2 时返回true

>=

op1 >= op2

当op1 大于或等于op2 时返回true

<

op1 < op2

当op1 小于op2 时返回true

<=

op1 <= op2

当op1 小于或等于op2 时返回true

==

op1 == op2

当op1 等于大于op2 时返回true

!=

op1 != op2

当op1 不等于op2 时返回true

逻辑操作符
逻辑操作符与(&&),或(||),非(!)能根据参数的关系返回布尔值


代码如下:

public class Bool{
public static void main(String [] args){
Random rand=new Random(47);
int i=rand.nextInt(100);
int j=rand.nextInt(100);
System.out.println("i=" + i);
System.out.println("j=" + j);
System.out.println("i > j is" +( i>j));
System.out.println("i < j is" +( i<j));
System.out.println("i > =j is" +( i>=j));
System.out.println("i <=j is" +( i<=j));
System.out.println("i ==j is" +( i==j));
System.out.println("i !=j is" +( i!=j));
System.out.println("(i <10) && (j<10) is" +((i <10) && (j<10)));
System.out.println("(i <10) || (j<10) is" +((i <10) ||(j<10)));
}
}

输出
i=58
j=55
i>j is true
i<j is false
i>= j is true
i<=j is false
i==j is false
i!=j is true
(i <10) && (j<10) is false
(i <10) ||(j<10) isfalse
与或非操作只能应用于布尔值,如果在应该是String值的地方使用了boolean的话,布尔值会自动转换成适当的形式。
应注意的是在程序上对浮点数的比较是非常严格的。
条件操作符































Operator

Use

Description

&&

op1 && op2

当op1和op2都是true时,返回true ;如果op1的值是false,则不运算右边的操作数

||

op1 || op2

当op1和op2有一个是true时,返回true;如果op1的值是true,则不运算右边的操作数

!

! op

当op是false时,返回true;当op是true时,返回false

&

op1 & op2

运算op1和op2;如果op1和op2都是布尔值,而且都等于true,那么返回true,否则返回false;如果op1和op2都是数字,那么执行位与操作

|

op1 | op2

运算op1和op2;如果op1和op2都是布尔值,而且有一个等于true,那么返回true,否则返回false;如果op1和op2都是数字,那么执行位或操作

^

op1 ^ op2

运算op1和op2;如果op1和op2不同,即如果有一个是true,另一个不是,那么返回true,否则返回false;如果op1和op2都是数字,那么执行位异或操作

短路
当使用逻辑操作符的时候会遇到一种短路状况。既一但能够明确无误地确定整个表达式的值,就不再计算表达式余下的部分了。因此,整个逻辑表达式靠后的部分有可能不再计算。下面的例子展示了短路现象


代码如下:

public class ShortCircuit{
static Boolean test1(int val){
System.out.println(“test1(“+val+")");
System.out.println(“result:"+(val<1));
return val<1
}
static Boolean test2(int val){
System.out.println(“test1(“+val+")");
System.out.println(“result:"+(val<2));
return val<2
}
static Boolean test3(int val){
System.out.println(“test1(“+val+")");
System.out.println(“result:"+(val<3));
return val<3
}
public static void main(String [] args){
Boolean b=test1(0)&&test2(2)&&test3(2);
System.out.println(“expression is “ + b);
}
}

输出
test1(0)
result:true
test(2)
result:false
expression is false
由于调用了3个方法你会很自然的觉得3个方法应该都被运行,但实际上输出并非这样,因为在第二次测试产生一个false结果。由于这意味着整个表达式肯定为false,所以没必要继续计算剩余的表达式,那样只是浪费。“短路“一次正来源于此。实际上,逻辑上所有的逻辑表达式都有一部分不必计算,那将获得性能的提升。
三元操作符
三元操作符也成为条件操作符,他显得比较特别,因为有三个操作数,但是他又确实属于操作符的一种
其形式为
boolean-exp?value0 :value1
如果boolean-exp表达式结果为true,就计算value0,而且这个计算结果也就是操作符最终产生的值。如果boolean-exp表达式结果为false,就计算value1,同样的,他的结果也将成为操作符最后的值。
当然它也可以被if-else代替,但是三元操作符与if-else是完全不同的,操作符会产生一个值。


代码如下:

public class TernaryIfElse{
static int ternary(int i){
return i<10?i*100:i*10;
}
static int standardIfElse(int i){
if(i<10)
return i*100;
else
return i*10;
}
public static void main(String [] args){
System.out.println(ternary(9));
System.out.println(ternary(10));
System.out.println standardIfElse( (9));
System.out.println standardIfElse( (10));
}
}

输出
900
100
900
100
相比之下三元运算符要紧凑很多,而if-else更易理解
字符串操作符+和+=
Java中+和+=操作符除了之前讲到的作用外,在特殊的上下文环境中是可以用作字符连接的。所以他们又称为字符串操作符,字符串操作符有一些很有趣的行为。如果表达式以一个字符串起头,那么后续所有的操作数都必须是字符串型(编译器会自动将双引号中的字符序列传化成字符串):


代码如下:

public class StringOperators{
public static void main(String [] args){
int x=0,y=1,z=2;
String s="x,y,z";
System.out.println(s+x+y+z);
System.out.println(x+""+s);
s+="(summed) =";
System.out.println(s+(x+y+z));
System.out.println(“"+x);
}
}

输出
x,y,z 012
0 x,y,z
x,y,z (summed) = 3
0
应注意的是第一行输出的是012而不是总和3,是因为编译器将他们自动转化成了字符串形式,最后部分用+=讲一个字符串追加到了s上,并且用括号来控制了编译器的转换,使他们可以顺利求和。

(0)

相关推荐

  • 不能忽略c#中的using和as操作符的用处

    是不是很多人不用c#中的using和as操作符?甚至不知道?  其实这2个操作符在小处非常有用. 1.using  按照msdn的解释 using 语句定义一个范围,在此范围的末尾将处理对象.  举例: class TestUsing:IDisposable      {          public void Dispose()           {              Console.WriteLine("Dispose");           } public voi

  • c# 操作符?? null coalescing operator

    我们可以看下下面的这几个示例来看看这个操作符的使用方法: 复制代码 代码如下: string message = "Hello World"; string result = message ?? "null"; //这里的result的内容是 Hello World 再看下面的这个例子子: 复制代码 代码如下: string message = null; string result = message ?? "It's null"; //在这

  • C# 操作符之三元操作符浅析

    C# 操作符之三元操作符"?:"是什么呢? C# 操作符之三元操作符"?:"有时也称为条件操作符. 对条件表达式b?x:y,先计算条件b,然后进行判断. 如果b的值为true,计算x的值,运算结果为x的值:否则,计算y,运算结果为y的值. 一个条件表达式从不会又计算x,也计算y.条件操作符是向右关联的,也就是说,从左向右分组计算. C# 操作符之三元操作符"?:"操作实例: 表达式a?b:c?d:e将按a?b:(C?d:e)形式执行. ?:的第二

  • C# 常见操作符整理

    常见的操作符 赋值操作符:= 复合赋值运算符:+=,-=,*=,/=,%= 算数运算符:+,-,*,/,%(ß二元运算符),++,--(ß一元运算符) 条件运算符:>,<,>=,<=,!=,== 逻辑运算符:&&,||,|,! 几乎所有的操作符都只能操作基本数据类型,但是"=","=="和"!=",这些操作符能操作所有的对象.除此以外String类支持"+"和"+="

  • C# 操作符之二 算数操作符

    赋值运算符也有和算数操作符所结合的用法之前附录中有提及,用法是:比如要将x加上4,然后再赋值给x,就可以写成x+=4. 复制代码 代码如下: public class MathOps{ public static void main(String [] args){ Random rand=new Random(47); int i,j,k; j=rand.nextInf(100)+1; System.out.println("j:"+j); k=rand.nextInt(100)+1

  • LINQ投影操作符Select与限制操作符where介绍

    一.什么是LINQ?它可以用来做什么 语言集成查询(Language Integrated Query,LINQ)是一系列标准查询操作符的集合,这些操作符几乎对每一种数据源的导航.过滤和执行操作都提供了底层的基本查询架构. LINQ可查询的数据源包括XML(可使用LINQ TO XML).关系数据(使用LINQ TO SQL,及先前的DLINQ).ADO.NET DataSet(使用LINQ TO DataSet),以及内存中的数据. 二.投影操作符:Select Select操作符对单个序列或

  • Python魔术方法详解

    介绍 此教程为我的数篇文章中的一个重点.主题是魔术方法. 什么是魔术方法?他们是面向对象的Python的一切.他们是可以给你的类增加"magic"的特殊方法.他们总是被双下划线所包围(e.g. __init__ 或者 __lt__).然而他们的文档却远没有提供应该有的内容.Python中所有的魔术方法均在Python官方文档中有相应描述,但是对于他们的描述比较混乱而且组织比较松散.很难找到有一个例子(也许他们原本打算的很好,在开始语言参考中有描述很详细,然而随之而来的确是枯燥的语法描述

  • Windows Powershell条件表达式之条件操作符

    Powershell 中的比较运算符 -eq :等于 -ne :不等于 -gt :大于 -ge :大于等于 -lt :小于 -le :小于等于 -contains :包含 -notcontains :不包含 进行比较 可以将比较表达式直接输入进Powershell控制台,然后回车,会自动比较并把比较结果返回. 复制代码 代码如下: PS C:Powershell> (3,4,5 ) -contains 2 False PS C:Powershell> (3,4,5 ) -contains 5

  • PostgreSQL教程(五):函数和操作符详解(1)

    一.逻辑操作符: 常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符: 下面是PostgreSQL中提供的比较操作符列表: 比较操作符可以用于所有可以比较的数据类型.所有比较操作符都是双目操作符,且返回boolean类型.除了比较操作符以外,我们还可以使用BETWEEN语句,如:     a BETWEEN x AND y 等效于 a >= x AND a <= y        a NOT BETWEEN x AND y 等效于 a <

  • MongoDB 管道的介绍及操作符实例

    MongoDB 管道的介绍及操作符实例 一 介绍 管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数. MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理.管道操作是可以重复的. 表达式:处理输入文档并输出.表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档. 这里我们介绍一下聚合框架中常用的几个操作: $project:修改输入文档的结构.可以用来重命名.增加或删除域,也可以用于创建计算结果以及嵌套文档. $m

  • LINQ 标准查询操作符

    推荐大家下载本文的PDF进行阅读,可以方便的使用书签来阅读各个方法,而且代码中的关键字是高亮显示的.pdf版下载地址 http://www.jb51.net/books/24738.html 一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: 复制代码 代码如下: using (NorthwindDataContext db=new NorthwindDataContext()) { //查询

  • 第三章 php操作符与控制结构代码

    一.字符串插入 双引号与单引号的区别: 1.双引号的使用: 复制代码 代码如下: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <?php //双引号可以解析变量和转义字符 $username = "jack"; echo "his name is $username!"; echo "<br/>&

  • php学习笔记(三)操作符与控制结构

    一.字符串插入 为了给开发人员处理字符串值提供最大的灵活性,PHP 为字面插入和内容插入提供了 一种方法. 双引号提供了最大的灵活性,原因是变量和转移序列都会得到相应的解析. 复制代码 代码如下: <?php $userName = "张三"; echo "His name is $userName "; echo "<br />"; //中文会出现一些问题 echo "他的名字叫$userName ,他19岁了,已经

  • JavaScript 学习笔记之操作符(续)

    一.乘性操作符 1.乘法:* 乘法操作符的一些特殊规则: 如果操作数都是数值,按照常规的乘法计算,如果乘积超过了ECMAscript数值的表示范围,则返回infinity或者-infinity 如果有一个操作数是NaN,那返回结果就是NaN 如果是infinity与0相乘,返回NaN 如果infinity与非0数相乘,返回infinity或者-infinity infinity与infinity相乘,返回infinity 如果有一个操作数不是数值,后台会先调用number()将其转化为数值,再应

随机推荐