zoukankan      html  css  js  c++  java
  • 运算中的一些小细节和原理分析

    下面两种情况的原因:我们在赋值时,都是将 int 类型的常量赋给 byte 类型的变量,在这个过程中,编译器会进行判断,如果赋的值在 byte 类型值域内,就可以被赋值,反之依然会报错。

    情况一:3+4 是两个常量相加,结果依然是常量,赋值时就会进行相应的判断,能赋值就赋值,不能赋值就不赋值,3+4=7,可以被赋值,所以不报错。

    情况二:a/b/c 这三个都是变量,既然是变量,那就证明值是可变的,也就是说变量a加上变量b的值有可能超出 byte 的值域,所以编译报错,需要手动强转。

    情况一:
    byte a = 3;
    a = 3 + 4;//不报错
    情况二:
    byte a = 3;
    byte b = 4;
    byte c = a + b;//会报错

    为什么 a+=2 不报错,a=a+2 会报错呢?

    就像上面说的,a 是变量,那么做运算时就有超出值域的可能性,a+=2 之所以不报错是因为在编译时,系统会自动帮我们进行强转,而 a=a+2 并不会,需要手动强转,这就是 a+=2 和 a=a+2 的一点区别。

    为什么int类型的变量b并没有出现报错的情况呢?

    是因为默认的int和double类型,即使超出值域了,也不会报错,而是直接将多余的部分砍掉,取剩下的值。

    short a = 3;
    a += 2;//编译不报错
    a = a + 2;//编译报错
    int b = 3;
    b += 2;//不报错
    b = b + 2;//不报错

    下面 a=a++; 运算过后,a 的值还是 7,而不是 8,是因为:

    a=a++ 整个运算过程如下:( b=a++ 运算过程一样,先算 ++ 再赋值)

                 先定义一个临时变量将 a 的值存起来

                通过临时变量的值进行 ++ 运算,将运算结果赋值给 a

                然后再将临时变量的值再赋给变量 a,这样之前的运算结果就会被覆盖掉,所以 a 的值依然是 7

    int a = 5;
    a++;//a的值为6
    int b = a++;//b的值为6,a的值为7
    a = a++;//a的值为7

  • 相关阅读:
    zabbix 微信告警
    mongodb 的数据备份与还原
    Templates
    Rsyslog 基本结构
    matplotlib绘图学习
    pyhon 简介
    Pygame (Python编程从入门到实践)
    AttributeError: 'pygame.Surface' object has no attribute 'rect'
    PYTHON CLIENT API
    SALT.STATES.CMD模块
  • 原文地址:https://www.cnblogs.com/xiaoyulong/p/8278947.html
Copyright © 2011-2022 走看看