运算符

来源:互联网 发布:天行健君电子商务软件 编辑:程序博客网 时间:2024/06/18 17:51

运算符

1 算术运算符

运算符 运算 范例 结果 + 正号 +3 3 - 负号 b=3;-b; -3 + 加 5+5 10 - 减 6-4 2 * 乘 3*4 12 / 除 5/5 1 % 取模(相当于相除后的余数) 5&3(5/3得1**余2**) 2 ++ 自增(前) a=2;b=++a; (a自增后赋值给b) a=3;b=3 ++ 自增(后) a=2;b= a ++; (a赋值给b后自增) a=3;b=2 -- 自减(前) a=2;b=–a; a=1;b=1 -- 自减(后) a=2;b=a–; a=1;b=2 + 字符串相加 “he”+”llo” hello

取模技巧:
左边<右边,结果=左边
左边=右边,结果=0
右边=1,结果=0
结果正负由左边数(被模数)正负决定

自增:相当于+1

char c = ‘你’;//char是2字节,一个中文也是2字节,可以赋值(“你好”超2字节,不能赋值)

转义字符

通过“\”来转变后面字母或符号的含义
\n:换行
\r:按下回车键;Windows系统中,回车符由两个字符表示\r\n
\b:退格
\t:制表符,相当于tab键

算术运算符的注意问题

• 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模
数是负数就另当别论。
• 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时
,只保留整数部分而舍弃小数部分
  例如:int x = 3510; x = x / 1000 * 1000; 结果x=3000
• “+”除字符串相加功能外,还能把非字符串转换成字符串,字符串数据和任何数据使用“+”都是相连接,最终都会变成字符串

2 赋值运算符

符号
  = , +=, -=, *=, /=, %=
  Eg. x**+=4;//x=x+4,把右边和左边的和赋予左边**
示例
  int a,b,c; a=b=c =3;
  int a = 3; a+=5;等同运算a=a+5;
思考
short s = 3; s=s+2;
short s = 3; s+=2;
有什么区别?
s=s+2//编译失败,因为s会被提升为int类型,运算后的结果还是int类型。无法赋值给short类型。
s+=2//编译通过,因为+=运算符在给s赋值时,自动完成了强转操作

3 比较运算符

运算符 运算 范例 结果 == 相等于 4==3 false != 不等于 4!=3 true < 小于 4<3 false > 大于 4>3 true <= 小于等于 4<=3 false >= 大于等于 4>=3 true instanceof 检查是否是类的对象 “hello” instanceof Strihng true

注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false
注2:比较运算符“==”不能误写成“=” 。

4 逻辑运算符

运算符 运算 范例 结果 & AND(与) false&true false | OR(或) false|true true ^ XOR(异或) false^true true true^true false ! Not(非) !true false && AND(短路) false&&true false || OR(短路) false||true true

逻辑运算符用于连接布尔型表达式,在Java中不可以 写成3<x<6,应该写成x>3 &x<6 。

“&”和“&&”的区别:
• 单&时,左边无论真假,右边都进行运算;
• 双&时,如果左边为真,右边参与运算,如果左边为假,那 么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算

异或( ^ )与或( | )的不同之处是:当左右都为true时, 结果为false。

5 位运算符

运算符 运算 范例 << 左移
空位补0,被移除的高位丢弃,空缺位补0。 3 << 2 = 12 ‐‐> 3*2*2=12 >> 右移最高位补0或1由原最高位决定
被移位的二进制最高位是0,右移后,空缺位补0; 最高位是1,空缺位补1。 3 >> 1 = 1 ‐‐> 3/2=1 >>> 无符号右移最高位只补0
被移位二进制最高位无论是0或者是1,空缺位都用0补。 3 >>> 1 = 1 ‐‐> 3/2=1 & 与运算
二进制位进行&运算,只有1&1时结果是1,否则是0; 6 & 3 = 2 | 或运算
二进制位进行 | 运算,只有0 | 0时结果是0,否则是1; 6 | 3 = 7 ^ 异或运算
任何相同二进制位进行 \^ 运算,结果是0;1\^1=0 , 0\^0=0
不相同二进制位 ^ 运算结果是1。1\^0=1 , 0\^1=1 6 \^ 3 = 5 ~ 非(反码)(相当于数值加1再加负号 \~-9=8)
二进制值:1变0 0变1 \~6 = ‐7

位运算是直接对二进制进行运算

左移右移

<<:相当于乘与2的移动位数次幂
>>:相当于除以2的移动位数次幂
移n位,就是对乘以或者除以2的n次幂。
Eg.-**8>>**3=-1 (相当于-8/23=-1)
*1*1111111 11111111 11111111 11111000
111*11111111 11111111 11111111 11111*000 右移三位,最高位补0或1由原最高位决定

^异或运算

5^7:
  101
 & 111 1相当于是true,0相当于false
 ———-
  010 =2
一个数异或另一数两次,结果还是原数(7^3^3=7,实际应用:3先异或对数据7上锁,再用3异或才能读取数据7,3此时相当于安全秘钥~)

~ 非

~9=-10(相当于数值加1再加负号 ~-9=8)
00000000 00000000 00000000 00001001(原数9)
11111111 11111111 11111111 11110110(~非运算后的值-二进制中的1变0 0变1)

附:负数计算

11111111 11111111 11111111 11110110(负数,上面非运算后的值)
下面推导这个二进制值对应十进制负数具体是多少:
11111111 11111111 11111111 11110101 减1
00000000 00000000 00000000 00001010 取反,得知结果为-10

位运算符练习:

1.最有效率的方式算出2乘以8等于几?

  2<<3;

2.对两个整数变量的值进行互换(不需要第三方变量)

目的:互换x和y的值
方法1:通过第三方变量(平常较常用)
方法2:通过加减运算,如果x和y值非常大,容易超出int范围
方法3:通过异或运算(答题技巧)
方法1

int z;z=x;x=y;y=z;System.out.println("x1="+x+" y1="+y);

方法2

x=x+y;//如果x和y值非常大,容易超出int范围y=x-y;x=x-y;System.out.println("x2="+x+" y2="+y);

方法3

x=x^y;y=x^y;//x两次^y,返回x的值x=x^y;System.out.println("x3="+x+" y3="+y);

6 三元运算符

格式
• (条件表达式)?表达式1:表达式2;
• 如果条件为true,运算后的结果是表达式1;
• 如果条件为false,运算后的结果是表达式2;

示例:
• 获取两个数中大数。

int x=3,y=4,z;z = (x\>y)?x:y;//z变量存储的就是两个数的大数。
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我睡过王妈65岁口i述 亚速尔 亚速海 速乐减肥训练营 速八减肥训练营 阿那亚 热那亚 亚利桑那 阿那亚旅游攻略 阿那亚攻略 阿那亚度假村 阿那亚在哪 亚利桑那州立 亚利桑那州 阿那亚房价 阿那亚aranya 秦皇岛阿那亚度假村 秦皇岛阿那亚 热那亚队 亚那加基 亚拉那一卡 阿那亚酒店多少钱一晚 阿那亚app 亚利桑那号战列舰 美国亚利桑那大学 阿那亚房子不能买 亚利桑那州立大学网站 亚利桑那州立大学招生 昌黎阿那亚酒店怎么样 亚里亚 爱音亚里亚 爱音亚里亚中文播放 爱音亚里亚手机在线播放 亚得里亚海 亚里沙写真 宫川亚里沙 羽生亚里沙中文字幕 园田亚里沙 羽生亚里沙在线播放 羽生亚里沙在线手机观看 羽生亚里沙在线中文