黑马程序员java——day03

运算符和表达式

算数运算符

小数运算

代码中,如果有小数参与运算,结果可能不准确。

除,取余,取模

除法
public static void main(String[] args) {
    System.out.println(10/3); //3
    System.out.println(10/2); //5
    System.out.println(10.0/3); //3.3333333333333335
}

结论:

  1. 整数之间的除法结果只能得到整数(向下取整)。

  1. 小数参与计算,结果可能不精确,如果想要精确计算,则需要用到后面的知识点。

取余

取余运算其实和除法运算一样,只不过除法运算得到的是整数,取余运算得到的是余数。

public static void main(String[] args) {
    System.out.println(10%3); //1
    System.out.println(10%2); //0
    System.out.println(10.0%3); //1.0
}

注意:浮点数参与取余运算,得到的结果还是浮点数。

+

那么如何转换呢?

首先介绍java两种数据类型转换形式,隐式转换和强制转换。

隐式转换

变量b就为10.0

第一种情况c为double类型,第二种情况c为int类型。

练习

强制转换

上图示例300超过byte取值范围,300-127-128-1 = 44。可以抽象理解为环形。

public static void main(String[] args) {
int a = 300;
    byte b = (byte)a;
    System.out.println(b); //44
}
字符串拼接

练习

字符相加

注意字符加字符串就是字符串拼接。

public static void main(String[] args) {
    System.out.println('a'+'b'); //195
    System.out.println('a'+0);//97
    System.out.println('a'+"bcd");//abcd
}

自增自减运算符

自增自减运算符可以真实改变变量值。

赋值运算符

细节:

关系运算符

注意关系运算符得到的结果都是boolean类型的,只能为true或者false。

逻辑运算符

短路逻辑运算符

相当于对传统逻辑运算符进行优化,避免一些不必要的操作。

注意一下题目

三元运算符

练习

运算符优先级

其他运算符

原码补码反码

看一下0加1

结合数轴来理解,最高位决定方向,所以这是原码用负数进行计算,就会出现结果与实际正确结果相反的。

然后出现了反码。

现在验证一下-56加上1是否为-55。

上图-56的反码加1之后为11001000。而-55的原码为10110111,取反码为11001000,所以

可以证得,-56的反码加1之后,再取反码,就得到正确答案。

但是反码进行加法运算再由负数变为整数的时候,会出现1的误差。

出现问题的根本原因在于出现了-0和+0,-0的反码加上1之后变为了00000000,而正数的反码是他本身,所以还是0。(出现+0和-0的根本原因在于规定了最高位为符号位)

所以反码中0有两种表达方式是根本原因,那么解决起来也是很简单,反码加上1不就行了。所以出现了补码。

再补码中0有了惟一的表达方式。正数的补码是它本身,负数的补码是反码加1。

再看看-128

-128没有原码,所以自然也就没有反码,但是补码是再反码基础上加1,这样就没有两个0了(-0和+0),可以 从上图看到+0和-0的补码都为00000000,那么就多出了一组补码,所以-128就没有原码和反码,而有补码。所以,计算机中规定补码为10000000代表-128。这也就是为什么计算机中一个字节的范围为-128到+127。计算机中数据的存储和计算都是以补码形式进行的。

总结

隐式转换就直接在前面补0。

强制转换就是将前面多余的截掉。

注意上面的是正数的情况,如果为-200,像左移动两位,结果为-800。

右移一次就相当于除2。注意不会改变符号位,如果上面为-200,向又移动两位为-50。

无符号右移

不管是正数还是负数,补的都是0。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值