Javaの演算子とは何ですか?

青灯夜游
リリース: 2019-12-30 17:26:29
オリジナル
5120 人が閲覧しました

Javaの演算子とは何ですか?

Java の演算子は、算術演算子、関係演算子、論理演算子、ビット単位演算子の 4 つのカテゴリに分類できます。

算術演算子

Java の算術演算子は、単項演算子と二項演算子に分類されます。単項演算子にはオペランドが 1 つだけありますが、二項演算子には 2 つのオペランドがあり、演算子は 2 つのオペランドの間に配置されます。算術演算子のオペランドは数値型である必要があります。

1. 単項演算子:

単項演算子は次のとおりです: 正 ( )、負 (-)、プラス 1 ( )、マイナス 1 (--) 4 個。

加算 1 および減算 1 演算子は、数値型変数にのみ使用でき、式では使用できません。プラス 1 演算子とマイナス 1 演算子は、変数の前 (++i など) または変数の後に (i++ など) 配置できます。この 2 つの違いは、変数の前に配置した場合 (++i など)、変数値が最初に 1 加算または 1 減算され、その後、他の対応する演算 (主に代入演算) が実行されます。変数の後に配置された場合 (i++ など)、他の対応する演算が最初に実行されてから、変数値が加算されます。 1を引いたもの。

例:

int i=6,j,k,m,n;
j = +i;//取原值,即j=6
k = -i;//取负值,即k=-6
m = i++;//先m=i,再i=i+1,即m=6,i=7
m = ++i;//先i=i+1,再m=i,即i=7,m=7
n = j--;//先n=j,再j=j-1,即n=6,j=5
n = --j;//先j=j-1,再n=j,即j=5,n=5
ログイン後にコピー

記述する際にも注意してください。単項演算子とその前後のオペランドの間にはスペースを使用できません。スペースを使用しないと、コンパイル中にエラーが発生します。

2. 二項演算子

二項演算子には、加算 ( )、減算 (-)、乗算 (*)、除算 (/)、フェッチ Remain( %)。このうち、-、*、/ は加算、減算、乗算、除算の四則演算を完了し、% は 2 つのオペランドを除算した余りを求めます。

%剰余演算の例:

a % b = a - (a / b) * b
ログイン後にコピー

剰余演算子は、両方のオペランドが整数である場合だけでなく、両方のオペランドが浮動小数点数である場合 (またはオペランドが浮動小数点数である場合) にも使用できます。 )。両方のオペランドが 7.6 % 2.9 などの浮動小数点数の場合、計算結果は 7.6 - 2 * 2.9 = 1.8 となります。

両方のオペランドが int 型の場合、a%b の計算式は次のとおりです。

a % b = a - (int)(a / b) * b
ログイン後にコピー

両方のオペランドが long (または他の整数型) の場合、a% の計算式は次のとおりです。 b は類推により推定できます。

2 項演算に関与する 2 つのオペランドのデータ型が異なる場合、結果のデータ型は、より精度の高い (またはより長い桁の) データ型と一致します。

例:

7 / 3 //整数除算、演算結果は 2

7.0 / 3 //除算、演算結果は 2.33333、つまり、結果と精度です。上位の型は一貫しています。

7 % 3 //剰余、演算結果は 1

7.0 % 3 //剰余、演算結果は 1.0

-7 % 3 //剰余、演算結果は -1、つまり演算結果の符号は左のオペランドと同じです

7 % -3 //剰余、演算結果は 1、つまり演算結果の符号は左のオペランドと同じです 数値は同じです

関係演算子

関係演算子は 2 つの値の大きさを比較するために使用され、演算の結果は論理型の数値になります。 6 つの関係演算子があります: 等しい (==)、等しくない (!=)、より大きい (>)、以上 (>=)、未満 (<)、以下(<=) に。

例:

9 <= 8 //演算結果は false

9.9 >= 8.8 //演算結果は true

'A' < 'a' //文字 'A' の Unicode エンコード値が文字 'a' の Unicode エンコード値より小さいため、演算結果は true になります。以上 (または (以下) 関係演算子の場合、どちらの関係演算 (以上) も成立しない場合にのみ、結果の値が false になることに注意してください。以上) 関係演算が成立し、結果の値は true になります。たとえば、9 <= 8 の場合、9 は 8 未満でも 8 に等しくもないため、9 <= 8 は false と評価されます。 9 >= 9 の場合、9 は 9 に等しいため、9 >= 9 の演算結果は真になります。

論理演算子

論理演算子では、オペランドのデータ型が論理型である必要があり、演算結果も論理値になります。 。論理演算子には、論理 AND (&&)、論理 OR (||)、論理 NOT (!)、論理 XOR (^)、論理 AND (&)、および論理 OR (|) が含まれます。

真理値表は、論理演算の機能を直感的に表現する方法であり、具体的な方法は、論理演算で考えられるすべての値を表形式でリストすることです。 Java 言語の論理演算子の真理値表は次のとおりです。

論理演算子の真理値表

A B A&&B A||B !A A^BA&BA|B

false false false false true false false

true false true false true false true

false true false true true true false true

true true true false false true true

前两列是参与逻辑运算的两个逻辑变量,共有4种可能,所以表2.5共有4行。后6列分别是6个逻辑运算符在逻辑变量A和逻辑变量B取不同数值时的运算结果值。

要说明的是,两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。其区别是:&和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。

例如,有如下逻辑表达式:

(i>=1) && (i<=100)
ログイン後にコピー

此时,若i等于0,则系统判断出i>=1的计算结果为false后,系统马上得出该逻辑表达式的最终计算结果为false,因此,系统不继续判断i<=100的值。短路计算功能可以提高程序的运行速度。

建议读者:在程序设计时使用&&和||运算符,不使用&和|运算符。

用逻辑与(&&)、逻辑或(||)和逻辑非(!)可以组合出各种可能的逻辑表达式。逻辑表达式主要用在 if、while等语句的条件组合上。

例如:

int i = 1;
while(i>=1) && (i<=100) i++;//循环过程
ログイン後にコピー

上述程序段的循环过程将i++语句循环执行100次。

位运算符

位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。

位运算符共有7个,分别是:位与(&)、位或(|)、位非(~)、位异或(^)、右移(>>)、左移(<<)、0填充的右移(>>>)。

位运算的位与(&)、位或(|)、位非(~)、位异或(^)与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值。

位运算示例

运算符 名称 示例说明

& 位与x&y 把x和y按位求与

| 位或x|y 把x和y按位求或

~ 位非~x 把x按位求非

^ 位异或 x^y 把x和y按位求异或

>> 右移x>>y把x的各位右移y位

<< 左移x<

>>> 右移x>>>y 把x的各位右移y位,左边填0

举例说明:

1、有如下程序段:

int x = 64;   //x等于二进制数的01000000
int y = 70;   //y等于二进制数的01000110
int z = x&y   //z等于二进制数的01000000
ログイン後にコピー

即运算结果为z等于二进制数01000000。位或、位非、位异或的运算方法类同。

2、右移是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。这是因为整数在机器内部采用补码表示法,正数的符号位为0,负数的符号位为1。例如,对于如下程序段:

int x = 70;   //x等于二进制数的01000110
int y = 2;
int z = x>>y  //z等于二进制数的00010001
ログイン後にコピー

即运算结果为z等于二进制数00010001,即z等于十进制数17。

对于如下程序段:

int x = -70;  //x等于二进制数的11000110
int y = 2;
int z = x>>y  //z等于二进制数的11101110
ログイン後にコピー

即运算结果为z等于二进制数11101110,即z等于十进制数-18。要透彻理解右移和左移操作,读者需要掌握整数机器数的补码表示法。

3、0填充的右移(>>>)是不论被移动数是正数还是负数,左边移进的部分一律补0。

其他运算符

1、赋值运算符与其他运算符的简捷使用方式

赋值运算符可以与二元算术运算符、逻辑运算符和位运算符组合成简捷运算符,从而可以简化一些常用表达式的书写。

赋值运算符与其他运算符的简捷使用方式

运算符 用法 等价于说明

+= s+=is=s+i s,i是数值型

-= s-=is=s-i s,i是数值型

*= s*=is=s*i s,i是数值型

/= s/=is=s/i s,i是数值型

%= s%=is=s%i s,i是数值型

&= a&=ba=a&b a,b是逻辑型或整型

|= a|=ba=a|b a,b是逻辑型或整型

^= A^=ba=a^b a,b是逻辑型或整型

<<=s<<=i s=s<

>>=s>>=i s=s>>is,i是整型

>>>= s>>>=i s=s>>>i s,i是整型

2、方括号[]和圆括号()运算符

方括号[]是数组运算符,方括号[]中的数值是数组的下标,整个表达式就代表数组中该下标所在位置的元素值。

圆括号()运算符用于改变表达式中运算符的优先级。

3、字符串加(+)运算符

当操作数是字符串时,加(+)运算符用来合并两个字符串;当加(+)运算符的一边是字符串,另一边是数值时,机器将自动将数值转换为字符串,这种情况在输出语句中很常见。如对于如下程序段:

int max = 100;
System.out.println("max = "+max);
ログイン後にコピー

计算机屏幕的输出结果为:max = 100,即此时是把变量max中的整数值100转换成字符串100输出的。

4、条件运算符(?:)

条件运算符(?:)的语法形式为:

<表达式1> ?<表达式2> : <表达式3>
ログイン後にコピー

条件运算符的运算方法是:先计算<表达式1>的值,当<表达式1>的值为true时,则将<表达式2>的值作为整个表达式的值;当<表达式1>的值为false时,则将<表达式3>的值作为整个表达式的值。如:

int a=1,b=2,max;
max = a>b?a:b;   //max等于2
ログイン後にコピー

5、强制类型转换符

强制类型转换符能将一个表达式的类型强制转换为某一指定数据类型,其语法形式为:

(<类型>)<表达式>
ログイン後にコピー

6、对象运算符instanceof 

对象运算符instanceof用来测试一个指定对象是否是指定类(或它的子类)的实例,若是则返回true,否则返回false。

7、点运算符 

点运算符“.”的功能有两个:一是引用类中成员,二是指示包的层次等级。 

运算符的优先级 

以下按优先级从高到低的次序列出Java语言中的所有运算符,表中结合性一列中的“左右”表示其运算次序为从左向右,“右左”表示其运算次序为从右向左。

优先级 运算符 结合性 

1   .  []  ()  ;  , 

2   ++  ――  +=  !  ~  +(一元) -(一元)  右左

3   *  /  %  左右

4   +(二元)  -(二元)  左右

5   << >>  >>>  左右

6   < >  <= >=  instanceof 左右

7   = =  !=  左右

8   &左右

9   ^左右

10  |左右

11  &&   左右

12  ||   左右

13  ?:  右左

14  =  *=  /=  %=  +=  -=  <<= >>=  >>>=  &=  ^=  |=   右左

推荐学习:Java视频教程

以上がJavaの演算子とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!