个人认为运算符常见的一些简单问题

开篇都是这一句,见谅!由于本人是个初学者希望自己的文章不会误导广大“群众“,如果有错误之处还望前辈指出。谢谢!

一、扩展的运算符(+= ,-= ,*= ,/=,%=)的一个小问题:存在强制类型的转换。

short s=1;s = s+1; 
short s=1;s+=1;
上面两个代码有没有问题,如果有,那里有问题。
第一个有问题,第二个没有问题。
因为:第一行代码里s为指定的string类型,s+1有一次类型转换,变成了int类型,再赋值给short类型的时候会报错显示损失精度。然而扩展的赋值运算符其实隐含了一个强制类型转换。
s += 1;
不是等价于 s = s + 1;而是等价于 s = (s的数据类型)(s + 1);因而编译运行成功。

二、比较运算符:
==,!=,>,>=,<,<=
特点:无论你的操作是简单还是复杂,(结果都是boolean类型!!!!。)

//boolean flag = (a == b);
//boolean flag = (a = b); //这行代码是有问题的,不兼容的类型;里面不是比价运算符,而是赋值运算符。因此=不要与==混淆。
//System.out.println(flag);

三、逻辑运算符:&,|,^,! ,&&,||

&&和&的区别? 同理||和|的区别?
A:最终结果一样。
B:&&具有短路效果。左边是
false,右边不执行。
 ||具有短路效果。左边是
true,右边不执行。

举例:

int x = 3;
int y = 4;

boolean b1 = ((++x == 3) && (y++ == 4));//(4==3flase)已经错误,后边的不再执行。如果输出的话:x=4,y=4,b1=flase

boolean b2=((++x==4)||(y++==4);//(++x==4)已经正确,后边的不再执行。如果输出的话:x=4;y=4;b2=true

四、位运算符:& | ~  ^ >> << >>>

临时有事,明天有空接着写,嘿嘿。谢谢观看和补充O(∩_∩)O

期末考试结束,代码撸起来!

要做位运算,首先要把数据转换为二进制。

例如:求~3和~4:  对补码的格式进行按位取反,而我们看到取反后的数值是原码格式

  3的二进制:     00000000 00000000 00000000 00000011   原码=补码

                             ~ 11111111 11111111 11111111 11111100   补码

                               11111111 11111111 11111111 11111011   反码

                                     10000000 00000000 00000000 00000100   原码       这里是我们看到的结果:-4

^的特点:一个数据对另一个数据位异或两次,该数本身不变。例如:a ^ b ^ b   结果a的值不变

<<:左移 左边最高位丢弃,右边补齐0       >>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1    (是啥补啥)   >>>:无符号右移 无论最高位是0还是1,左边补齐0

<< 把<<左边的数据乘以2的移动次幂:3 << 2=3*2^2=12;         >> 把>>左边的数据除以2的移动次幂:24 >> 2=24/(2^2)=6

*-24 >> 2 :

计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000

数据是对补码操作
11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00) 补码

补码:1111111111 11111111 11111111 111010
反码:1111111111 11111111 11111111 111001
屏幕显示的原码形式
原码:1000000000 00000000 00000000 000110
结果是-6

五、三目运算符: 比较表达式?表达式1:表达式2;结果是一个boolean类型的数据,执行流程:先看表达是正确与否;正确执行表达式1,错误执行表达式2

判断大小:int max = a>b?a:b;
System.out.println("两个数较大的数是:"+max);

//比较三个数的较大的值
int c = 12;
//int flag;常常用temp做为临时变量,flag用作boolean类型中常见
int temp = a>b?a:b;
int max1= c>temp?c:temp;
System.out.println("三个数较大的数是:"+max1);
}
}














原文地址:https://www.cnblogs.com/wanghang/p/6299923.html