java算数运算符

运算符:

一、算数运算符:

+、-、*、/、%、++、- -

加号:

其中+号有两种用途

1、加法运算
      只有两个都是数值类型的时候才执行加法运算
2、连接符
       可以拼接字符串
          可以通过空字符转string s=" "+10;的方法把整型10转化为字符串10
2、%

是取模或者叫取余数
例如46%7的值是4

3、单目运算符++、–
//++,表示在变量原有的基础上+1,谁在前,谁先运算
int a=1;
int b=2;
System.out.println( a++); 1
System.out.println( ++a);  3

那么System.out.println(++b+b++);结果会是几呢? 答案是6这里涉及到了运算优先级的问题。
//–同理

二、赋值运算符=

//扩展赋值运算符
int c=1;
c=c+1;等同c=c+1;
涉及到类型转换
下面出道面试题:
byte b=10;
b=b+1;
System.out.println(b);
会报错?
答案:是肯定会的,主要是因为其中1默认的是int类型数据
但是b是byte类型,在进行运算d+1的时候,会整体转换为int型,而结果确是需要把int类型转换为byte类型,需要进行强制转换,高类型向低类型时候会损失精度,而低类型向高类型转换会自动进行转换。
可以换一种写法
例如:
b+=1;
System.out.println(b); 这个时候就不会进行报错了。
所以建议选择第二种运算方式。

三、关系运算符

、<、>=、<=、==、!=
用于表示两个值的关系
System.out.println(1!=2); 返回值只有boolean类型即true、false两种情况,在面向对象的时候会有其他情况出现。

四、逻辑运算符

&&、||、!
逻辑运算符的两边一般是表达式,而不是具体的值
例如:
&&:且
System.out.println(3>5 && 3<4); FALSE 左边只要是错误直接跳出
System.out.println(3>5 & 3<4); FALSE 两边都会参与运算
|| :或
System.out.println(3>5 || 3<4); TRUE 左边不正确才,会进行右边运算
System.out.println(3>5 | 3<4); TRUE 两边都会参与运算
!:取反
System.out.println(!(3>5 || 3<4));FALSE

五、位运算符:只能操作数值,操作的时候会转化成二进制进行运算

System.out.println(4 & 5); 值为4 例如 4是 100 5是101
都为1才为1 所以运算结果是
100 =122+0*21+02^0=4
System.out.println(4 | 5); 值为 5
100 101 有一个1就为1 ,所以二进制数表示为101所以值是5
System.out.println(4 ^ 5); 值为1
100 101 位数为10或01才计数 所以二进制数表示为001,所以值为1
System.out.println(~4) 值为-5
4的二进制位是:
0000 0000 0000 0000 0000 0000 0000 0100 =2^(3-1)=4(10)
按位取反:
1111 1111 1111 1111 1111 1111 1111 1011 =
-231+230…0*22+21+1=-5
我们很容易推导出来2^31=后面所有值+1
例如 1111 2(4-1)=2(3-1)+2(2-1)+2(1-1)+1=4+2+1+1=8

所以说4按位取反后相比取 后的值是差了 2^(3-1)+1=5 所以最后值是-5
最后形成一个这样的公式即使x+X+1=0其中X是x按位取反后的值例如:
1011=-8+2+1=-5
0100=4
4+(-5)+1=0

计算机程序对正数和负数都要进行计算,所以需要一种方法来区分正数和负数。显而易见的解决方案
是增加一个独立的符号位,这种表示方法称为符号和幅值表示法。
但是该种方法有很多去电,符号位放在那里?是放在左边还是放在右边,其次是运算的时候不能提前知道运算结果是正的还是负的,而且对于该种方法的计算,在计算的时候还需要额外的一步来设置符号,最后一个单独的符号位意味着在该种表示方法中还可能存在正0和负0,所以最后这种方法被摒弃了。
正菜:
在研究更具吸引力的替代方案时产生了这样一个问题,当我们试图用一个较小的数减去一个较大的数的时候,无无符号数表示方法的结果将会是什么?答案是较小的数字将会从前面的0中借位,所有的结果中前面的位都变成了一串1。
在没有其他更明显的更好选择的情况下,最终的解决方案是选择一种易于硬件实现的表达方式:
前导位为0表示正数,前导位为1表示负数。这种常用的表示有符号二进制数的方法称为二进制补码:
这种二进制补码虽然说会给粗心的程序猿带来烦恼,但相比符号和幅值方法,该方法不会对程序猿和
硬件造成困扰。因此现在所有的计算机都采用的是二进制补码方法来表示有符号数。
例如:
0000 0000 0000 0000 0000 0000 0000 0000 =0(10)
0000 0000 0000 0000 0000 0000 0000 0001 =1(10)
0000 0000 0000 0000 0000 0000 0000 0010 =2(10)

0111 1111 1111 1111 1111 1111 1111 1101 =2,147,483,645(10)
0111 1111 1111 1111 1111 1111 1111 1110 =2,147,483,646(10)
0111 1111 1111 1111 1111 1111 1111 1111 =2,147,483,647(10)
1000 0000 0000 0000 0000 0000 0000 0000 =-2,147,483,648(10)
1000 0000 0000 0000 0000 0000 0000 0001=-2,147,483,647(10)
1000 0000 0000 0000 0000 0000 0000 0010 =-2,147,483,646(10)

1111 1111 1111 1111 1111 1111 1111 1101 =-3(10)
1111 1111 1111 1111 1111 1111 1111 1110 =-2(10)
1111 1111 1111 1111 1111 1111 1111 1111 =-1(10)

移位操作:
例如
System.out.println(2<<3); 010左移三位后变成 10000 2^4=16=2*(222)
左移3位乘以3次2
右移3位除以3次2

六、条件运算符或者叫三目运算符:

System.out.println(true?false:true?false:true);结果显而易见是true
使用的时候需要跟一个表达式,表达式如果是true,则返回?后的结果,false则返回:后面的结果

七、运算符的优先级

在这里插入图片描述

int b=2;
System.out.println(++b+b++)=6
System.out.println(b)=4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值