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

 更新时间:2020年6月25日 11:44  点击:1404
赋值运算符也有和算数操作符所结合的用法之前附录中有提及,用法是:比如要将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上,并且用括号来控制了编译器的转换,使他们可以顺利求和。
[!--infotagslink--]

相关文章

  • C# 常见操作符整理

    操作符接受一个或多个参数,并生成一个新值。操作符其实可以看做一个有返回值方法,但是参数的形式和调用和普通的调用不同。...2020-06-25
  • MongoDB操作符中的$elemMatch问题

    这篇文章主要介绍了MongoDB操作符中的$elemMatch问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • C++中点操作符和箭头操作符的使用详解

    本篇文章介绍了,C++中点操作符和箭头操作符的使用详解。需要的朋友参考下...2020-04-25
  • C++中的三大函数和操作符重载(Boolan)

    本文主要介绍了C++中的三大函数和操作符重载(Boolan)的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧...2020-04-25
  • 一个关于JS操作符in问题引发的探究

    这篇文章主要给大家介绍了一个JS操作符in问题引发的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • php中操作符与迭代整理

    操作符与迭代在开发应用中用到的非常的多了这里给各位整理了一篇关于php操作符与迭代整理教程,希望下面的文章能够帮助到你。 10.操作符  10.1 算术操作符   算...2016-11-25
  • C++中复制构造函数和重载赋值操作符总结

    这篇文章主要介绍了C++中复制构造函数和重载赋值操作符总结,本文对复制构造函数和重载赋值操作符的定义、调用时机、实现要点、细节等做了总结,需要的朋友可以参考下...2020-04-25
  • C# 中的??操作符浅谈

    用于如果类不为空值时返回它自身,如果为空值则返回之后的操作...2020-06-25
  • 一篇文章带你了解C语言操作符

    指令系统的每一条指令都有一个操作符,它表示该指令应进行什么样性质的操作,不同的指令用操作符这个字段的不同编码来表示,每个编码代表一种指令,这篇文章主要给大家介绍了关于C语言中操作符的相关资料,需要的朋友可以参考下...2021-08-29
  • C++之CNoTrackObject类和new delete操作符的重载实例

    这篇文章主要介绍了C++之CNoTrackObject类和new delete操作符的重载实例,是C++程序设计中比较重要的概念,需要的朋友可以参考下...2020-04-25
  • php常用操作符

    最常见的PHP赋值运算,算术运算符,联合经营,比较运算符和逻辑运算符。每个类型分别讨论如下。 赋值运算符 在PHP基本赋值运算符是“=”。这意味着,左边的操...2016-11-25
  • C# 操作符之三元操作符浅析

    C# 操作符之三元操作符“?:”是如何使用的呢?C# 操作符之三元操作符“?:”需要注意的是什么呢?那么本文就向你简单介绍C# 操作符之三元操作符“?:”的基本情况。...2020-06-25
  • C语言中的sizeof操作符用法及和strlen的区别

    这篇文章主要介绍了C语言中的sizeof操作符用法及和strlen的区别,本文讲解了sizeof的定义、sizeof的语法以及使用实例,最后给出sizeof与strlen的区别,需要的朋友可以参考下...2020-04-25
  • C++11新特性之自定义字面量

    这篇文章主要介绍了C++11新特性之自定义字面量的相关资料,帮助大家更好的学习c++,感兴趣的朋友可以了解下...2020-08-15
  • Swift实现“或”操作符的3种方法示例

    这篇文章主要给大家介绍了关于Swift实现“或”操作符的3种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-30
  • C语言安全编码之数值中的sizeof操作符

    这篇文章主要介绍了C语言安全编码的数值中的sizeof操作符用法注意事项,需要的朋友可以参考下...2020-04-25
  • sql server的cube操作符使用详解

    cube操作符 要使用cube,首先要了解group by 其实cube和rollup区别不太大,只是在基于group by 子句创建和汇总分组的可能的组合上有一定差别, cube将返回的更多的可能组合...2016-11-25
  • C++ 基础编程之十进制转换为任意进制及操作符重载

    这篇文章主要介绍了C++ 基础编程之十进制转换为任意进制及操作符重载的相关资料,需要的朋友可以参考下...2020-04-25
  • Java实现中文算数验证码的实现示例(算数运算+-*/)

    这篇文章主要介绍了Java实现中文算数验证码的实现示例(算数运算+-*/),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-12
  • 浅谈类型转换操作符is/as

    浅谈类型转换操作符is/as,需要的朋友可以参考一下...2021-09-22