Java的小实验——各种测试以及说明

日期:2018.10.07

星期五

博客期:014

一、Java中的位运算

代码如下:

 1 package Morts107;
 2  
 3 public class Test107 {
 4     public static void main(String[] args) {
 5        int z;
 6        z = 13>>1;//00001101(13)----------------[右移1位]-------------->00000110(6)
 7        System.out.println(" z = "+z);
 8        z = 45>>2;//00101101(45)----------------[右移2位]-------------->00001011(11)
 9        System.out.println(" z = "+z);
10        z = 6<<1;//00000110(6)------------------[左移1位]-------------->00001100(12)
11        System.out.println(" z = "+z);
12        z = 11<<2;//00001011(11)----------------[右移2位]-------------->00101100(44)
13        System.out.println(" z = "+z);
14        z = -1>>2;//10...0000001(-1)----------------[左移1位]-------------->10...010(-2)
15        System.out.println(" z = "+z);
16     }
17 }

本程序实现了int类型数值的位运算,如代码中的注释一样,计算机只能储存1和0,所以说这些数都是二进制的!而二进制的13就是(…001101),让它向右位移1位,自然就成了6(…00110),即13>>1==6成立,所以位运算就是这样!<<和>>分别表示左移和右移,而右边的操作数就是位置移动的数的大小!如11(…01011)左移2位,就是44(…0101100),即11<<2==44成立;这就相当于<<是这个数除以(2的后操作数次方)的结果,而>>就相当于是乘以(2的后操作数次方)的结果!而对于负数来说,它的第一位是1,所以负数最大也就是-1,-1/2也相当于-1!

正整数的原码、反码和补码都一样;

负数部分:

原码和反码的相互转换:符号位不变,数值位按位取反

原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1

二、数据类型所占的位数

Byte      1 字节   (8bit)

Char     2 字节   (16bit)

Short      2 字节   (16bit)

Int          4字节    (32bit)

Float      4字节    (32bit)

Long      8字节    (64bit)

Double   8字节    (64bit)

说明了一个问题:取值范围小的可以往取值范围大的类型转(浮点类型所表示范围较大),在非浮点类型转换到浮点类型时一定会失去一部分精度!

三、运行代码

结果如下:

 

不意外,因为float和double都是浮点类型,是不精确的!

四、实验

#:以下代码的输出结果是什么?

              int X=100;

              int Y=200;

              System.out.println("X+Y="+X+Y);

              System.out.println(X+Y+"=X+Y");

@:

#:为什么会有这样的输出结果?

String类的+是相当于StringBuffer类中的append()函数,就是因为这个原因,System.out.println(”I love”+” China!”);实际上和System.out.println(“I love China!”);是一个效果,而在X和Y(两个整形int的数据)相加时,自然是调用它们自己的加法函数了!)

猜你喜欢

转载自www.cnblogs.com/onepersonwholive/p/9751092.html