Java 运算符

运算符是什么呢?

想想小时候,从上学的哪一天开始,我们就学习到了一门学科<<数学>>,同时<<数学>>也是万科之后,数学是一门神奇的学科,至于神奇在哪里,以本人现在悟性要参透还需要一段时候。如果说在生活中能够运用到的数学知识,对于一个平常人来讲学完高中足以(本人也就是高中水平)。

想想我对数学的简单认识就是 一些数字加上一些符号的组成的一门学科。说道符号我依稀记得 "+" , "-" "x" "/": 这几个基本的运算符至于上初中学到的几何,已经是很模糊的概念了。

回想上来也就只有勾股定理了。(还是记得一句口诀沟3股4玄5)。

说了一推不该说的。我只是想回忆下数学中的符号而已,现在想来这些符号富含了一些思想的结晶。不管在哪个领域几乎都离不开数学。


符号的作用: 对数子进行运算,


回到正题:在Java中的运算符又有哪些呢?

1.Java中的运算符的分类

01.算术运算符

001. 单目运算符

+(正号) -(负号)  --(自减) ++(自增)

002.双目运算符

+(加好) -(减号) *(乘号) /(除号) %(求余)

003,三目运算符

a > b ? true : false

整个三目运算符由 表达式a + 关系运算符 + 表达式b + ?号 + :号组成

当a > b的时候,就执行:号前面的语句(也就是true的部分),否则就执行 :号后面的部分(也就是false的部门)


2.关系运算符

大于(>) 小于(<) 等于(==) 大于等于(>=) 小于等于(<=)   不等于(!=) 


3.逻辑袁福

,与(& 和 &&)  或(| 和 ||)  非(!)

& 和 &&的区别 :

 &和&&两端都是boolean表达式,例如: false & false 这里不仅需要判断第一个false,同时还会判断第二false

但是 false && false 如果第一个为false就不会去判断第二个false了。

| 和 || 也是同样的区别。


4.位运算符

&(与) :  当&作为运算符的时候,&两端的操作数就会转换为二进制码然后在进行运算

当两边的操作数的位同时为1时,结果为1,否则为0。如1100&1010=1000

|(或) :  当两边的操作数只需要有一个1使,结果就为1,否则就为0.如1100|1010=1110

~(非): 0变1,1变0

^(异或) : 当两边的操作不相同的时候,结果为1,否则就为0 . 如1100^1010=0110


5.位移运算符

左移(<<) : 向左移位 , 高位丢弃 , 地位补0.

右移(>>) : 向右移位 , 高位还是原来的最高位 , 低位丢弃

无符号右移(>>>) : 向右移位 , 高位永远为1 , 低位丢弃


6.赋值运算符

=(直接复制) +=(加等) -=(减等)  *=(乘等) /=(除等) %=(模等)

<<=(左移等) >>(右移等) >>>(无符号右移等) &=(与等) |=(或等) ^=(异或等)

7.特殊运算符

instanceof : 判断某个对象是否属于某个类型


下面是小子做的一些位运算的例子:

package com.zgy.javase.one;


public class BitComputing {



public static void main(String[] args) {
int param1 = -1000;
int param2 = 200;
//and(param1, param2);
//or(param1, param2);
//not(param1);
//xor(param1, param2);
//left(param1 , 3);
//right(param1, 5);
//unsignedRight(param1, 5);
System.out.println(Integer.toBinaryString(-32));
}

/**
* 位且 两个数对应的二进制位同时为 1 的时候 结果位才为 1
* @param param1
* @param param2
*/
public static void and(int param1 , int param2){

bitComput(Operator.BIT_AND, param1, param2);
}

/**
* 位或 两个数对应的二进制位只要有一个为 1 的时候 结果位就为为 1
* @param param1
* @param param2
*/
public static void or(int param1 , int param2){
bitComput(Operator.BIT_OR, param1, param2);
}

/**
* 位非 把原来数的二进制位都去反即可
* @param param1
* @param param2
*/
public static void not(int param1){
printBitComput(Operator.BIT_NOT, param1);
}

/**
* 位异或 两个数对应的二进制位不相同 结果位为1 , 相同则为0
* @param param1
* @param param2
*/
public static void xor(int param1 , int param2){
bitComput(Operator.BIT_XOR, param1, param2);
}

/**
* 位左移 将原来的数的二进制位都向左边移动 , 最高位丢弃 , 最低位补0
* @param value
* @param leftCount
*/
public static void left(int value , int leftCount){
moveBitComput(Operator.BIT_LEFT, value, leftCount);
}

/**
* 位右移 将原来的数的二进制位都向右边移动 , 最低位丢弃 , 最高位补0
* @param value
* @param leftCount
*/
public static void right(int value , int rightCount){
moveBitComput(Operator.BIT_RIGHT, value, rightCount);
}

/**
* 位无符号右移
* @param value
* @param rightCount
*/
public static void unsignedRight(int value , int rightCount){
moveBitComput(Operator.BIT_UNSIGNED_RIGHT, value, rightCount);
}


/**
* 位移
* @param operator
* @param value
* @param moveCount
*/
private static void moveBitComput(Operator operator, int value, int moveCount) {

String binary = Integer.toBinaryString(value);
String o = operator.getOperator();
System.out.print(value + " " + o + " " + moveCount + " = " + binary + " " + o + " " + moveCount + " = ");
switch (operator) {
case BIT_LEFT:
System.out.println(Integer.toBinaryString(value << moveCount) + " = " + (value << moveCount));
break;
case BIT_RIGHT:
System.out.println(Integer.toBinaryString(value >> moveCount) + " = " + (value >> moveCount));
break;
case BIT_UNSIGNED_RIGHT:
System.out.println(Integer.toBinaryString(value >>> moveCount) + " = " + (value >>> moveCount));
break;
default:
break;
}


}


/**
* 位运算
* @param operator
* @param param1
* @param param2
*/
public static void bitComput(Operator operator , int param1 , int param2){
if(param1 >= param2){
printBitComput(operator , param1 , param2);
}else{
printBitComput(operator , param2 , param1);
}
}

/**
* 打印位运算结果
* @param operator
* @param max
* @param min
*/
private static void printBitComput(Operator operator , int max, int min) {
String formatBlank = "  ";
String maxBinary = Integer.toBinaryString(max);
String minBinary = Integer.toBinaryString(min);
String blank = getBlank(String.valueOf(maxBinary).length() - String.valueOf(minBinary).length());
System.out.println(formatBlank + maxBinary);
System.out.println(operator.getOperator() + " ---------------------------");
System.out.println(formatBlank + blank + minBinary);
System.out.print("= ");
switch (operator) {
case BIT_AND:
System.out.println(blank + Integer.toBinaryString(max & min) + " = " + (max & min));
break;
case BIT_OR:
System.out.println(Integer.toBinaryString(max | min) + " = " + (max | min));
break;
case BIT_XOR:
System.out.println(Integer.toBinaryString(max ^ min) + " = " + (max ^ min));
break;
default:
break;
}
}



/**
* 打印位运算结果
* @param operator
* @param max
* @param min
*/
private static void printBitComput(Operator operator , int param) {
String binary = Integer.toBinaryString(param);
String o = operator.getOperator();
System.out.print(o + param + " = " + o + binary + " = ");
switch (operator) {
case BIT_NOT:
System.out.println(Integer.toBinaryString(~ param) + " = " +(~param));
break;
default:
break;
}
}

/**
* 获得空格
* @param leng
* @return
*/
private static String getBlank(int leng) {
String result = "";
for (int i = 0; i < leng; i++) {
result += " ";
}
return result;
}


}


package com.zgy.javase.one;


public enum Operator {

//位运算符
BIT_NOT("~"),
BIT_OR("|"),
BIT_AND("&"),
BIT_XOR("^"),

BIT_LEFT("<<"),
BIT_RIGHT(">>"),
BIT_UNSIGNED_RIGHT(">>>"),
;

private String operator;
public String getOperator(){
return operator;
}
private Operator(String operator){
this.operator = operator;
}


public static void main(String[] args) {
System.out.println("BIT_Unsigned_RIGHT".toUpperCase());
}

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值