回忆一遥远 发表于 2017-7-8 18:29:04

0基础学习Java ——第四天

本帖最后由 回忆一遥远 于 2017-8-16 07:37 编辑

指数计数法
例:
public class Exponents {
    public static void main(String[] args){
      // 小写的 e 和大写的 E 都可以
      float expFloat = 1.39e-43f;
      expFloat = 1.39E-43f;
      System.out.println(expFloat);
      double expDouble = 47e47d;
      double expDouble2 = 47e47;
      System.out.println(expDouble);
    }
}

输出:
1.39E-43
4.7E48


“e”代表自然对数的基数,约等于 2.718 (在 Math.E 给出了更精确的 double 型的值)。
然而,在设计 FORTRAN 语言的时候,设计师们把 e 代表“10的幂次”。这种惯例在 C、C++ 以及 Java 中被保留了下来。

如果编译器能够正确地识别类型,就不必在数值后附加字符。
例如:
long n = 200;

对于
float f = 1e-43f;
编译器通常会把指数作为 double 处理,所以如果尾部没有 f ,编译器就会提示使用类型转换将 double 转换成 float。





按位操作符

按位操作符用来操作整数基本数据类型中地单个“比特”(bit),即二进制位。
按位操作符会对两个参数中对应地位执行布尔代数运算,并生成一个结果。

按位操作符来源于 C 语言面向底层地操作,这种操作经常需要设置硬件寄存器中的二进制位。Java 的设计初衷是嵌入式机顶盒内,所以这种面向底层的操作仍被保留下来。但是并不常用。

操作符有:
“与”操作符 (&)
“或”操作符(|)
“异或”操作符(^)
“非”操作符(~)

&=、|=、^= 都是合法的, “~”不能与“=”联用。






移位操作符
移位操作符的运算对象也是二进制的“位”。移位操作符只能处理整形(整数类型)
左移操作符(<<)                    : 按照操作符右侧指定的位数将操作符左边的操作数向左移动,低位补0。
“有符号”左移操作符(>>) : 按照操作符右侧指定的位数将操作符左边的操作数向右移动,高位使用符号扩展(若符号为正,高位插0;若为负,插1)。
“无符号”左移操作符(>>>):它使用“0扩展”,无论正负,高位都插0。

对 char、byte、short 类型的数值进行移位处理时,在移位之前会被转化成 int 类型,并且结果也是一个 int 类型的值。

“移位”可以和“等号”组合使用(<<=、>>=、>>>=)

截断:
public class URShift {
    public static void main(String[] args){
      int i = -1;
      System.out.println(Integer.toBinaryString(i));
      i >>>= 10;
      System.out.println(Integer.toBinaryString(i));
      long l = -1;
      System.out.println(Long.toBinaryString(l));
      l >>>= 10;
      System.out.println(Long.toBinaryString(l));
      short s = -1;
      System.out.println(Integer.toBinaryString(s));
      s >>>= 10;
      System.out.println(Integer.toBinaryString(s));
      byte b = -1;
      System.out.println(Integer.toBinaryString(b));
      b >>>= 10;
      System.out.println(Integer.toBinaryString(b));
      b = -1;
      System.out.println(Integer.toBinaryString(b));
      System.out.println(Integer.toBinaryString(b>>>10));
    }
}
结果:
11111111111111111111111111111111
1111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111
11111111111111111111111111111111
11111111111111111111111111111111
11111111111111111111111111111111
11111111111111111111111111111111
1111111111111111111111







字符串操作符 + / +=
例子:
public class StringOperators {
    public static void main(String[] args){
      int x = 0, y = 1, z = 2;
      String s = "x, y, z ";
      System.out.println(s + x + y + z);
      System.out.println(x + " " + s);
      s += "(summed) =";
      System.out.println(s + (x + y + z));
      System.out.println("" + x);
    }
}
结果:
x, y, z 012
0 x, y, z
x, y, z (summed) =3
0







类型转换操作符
强制执行类型转换时,把要得到的数据类型放在圆括号中,放在要进行类型转换的值的左边。
比如 b = (int)i;






截尾和舍入
如果把一个浮点数转换成整型,Java 时如何处理的?
比如把19.9转换成int,结果时30还是20?
实例:
public class CastinNumbers {
    public static void main(String[] args){
      double above = 0.7, below = 0.4;
      float fabove = 0.7f, fbelow = 0.4f;
      System.out.println("(int)above: " + (int)above);
      System.out.println("(int)below: " + (int)below);
      System.out.println("(int)fabove: " + (int)fabove);
      System.out.println("(int)fbelow: " + (int)fbelow);
    }
}
输出:
(int)above: 0
(int)below: 0
(int)fabove: 0
(int)fbelow: 0

由上面的实例可知, Java 时截尾处理的。
若要舍入的结果,需要使用 java.lang.Math 中的 round() 用法:
round() 是 java.lang 的一部分,不需要额外导入。





Java 中取消了 sizeof
页: [1]
查看完整版本: 0基础学习Java ——第四天