两个正数相乘或相加,为什么结果是负数。/Java基本数据类型介绍

两个正数相乘或相加,为什么结果是负数。

首先

1.Java基本数据类型

分为四大类,共八小类

  • 整数型 :byte、short、int、long 分别占 1、 2、 4、 8 个字节

  • 浮点型: float、double 4、 8 个字节

  • 字符型 :char 2 个字节

  • 布尔型: boolean 布尔类型占多少个字节? Java中没有明确规定boolean类型占用几个字节,这主要取决于Java虚拟机,自己见解是,boolean类型一共两种取值,true或false,true就是1,false就是0,所以只占1位(bit)。

1byte(字节)= 8 bit(位)

  • 一个byte表示的数的范围:256个数
    无符号数:0-255(2^8-1) 256个数
    有符号数:-128(-2^7)-- 127 (2^7-1) 还是256个数
  • short 2个字节 16位
    范围是 (-2^15) 到(2^15-1) 3万多之间

2. 这里通过两个正数都是int类型来举例

(int num1 = 90000; int num2 = 90000; int result = num1 * num2;)

由上可知 int类型为32位(bit)–>大概在正负21亿之间,-2^31
到(2^31)-1 --> 二进制正数最高位一定为0,负数最高为一定为1。

十进制:90000 × 90000

二进制:0000 0000 0000 0001 0101 1111 1001 0000 × 0000 0000 0000 0001 0101 1111 1001 0000

结果为:1 1110 0010 1100 1100 0011 0001 0000 0000 (十进制是 -1657549056)
溢出了,只看低32位,最高位是1,所以计算出的结果显示负数。

3.其它

3.1隐式类型转换原则:

从低字节向高字节转换

byte --> short --> int --> long --> float --> double

  • 算数运算:
    如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
    否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
    否则,如果其中一个操作数是long类型,另一个会转换为long类型。

    否则,两个操作数都转换为int类型。

3.2强制类型转换

  • 用于将一种数据类型强制转换成另一种数据类型,但可能造成精度降低或溢出。
  • 语法格式:目标类型 变量 =(目标类型)源类型变量或常量
  • 例如:
public static void main(String[] args) {
	float a = 123.23f;
	byte b = (byte)a;      // 注意:强转之后有可能会丢失精度
	System.out.println(b); // 输出:123
	                       // 注意:原类型数据被强转后数据是不会变化。
	System.out.println(a); // 输出:123.23   

4.记录

  • C语言:面向过程语言。可以对机器进行操作。贝尔实验室。

  • C++:在C语言的基础上进行改进的,半面向对象半面向过程。

  • Java:在C++的基础上进行改进的,面向对象。(SUN公司发明的,2009年,甲骨文(Oracle)公司宣布收购SUN 。2010年,Java编程语言的共同创始人之一詹姆斯·高斯林从Oracle公司辞职)

    ​ 最大的核心是可以跨平台,Java跨平台是 **一次编译,到处运行,通过将源代码先编译成字节码文件,然后通过不同平台上的虚拟机进行解释执行。C语言跨平台是多次编译,到处运行,**通过根据不同平台,然后编译成不同的机器语言,然后在不同平台执行的结果是相同的。Java的跨平台原理决定了其性能没有C/C++高,由于使用了JVM虚拟机。

  • C#:是在Java的基础上进行改进的,但为什么没有Java火,C#最大的缺点是只支持微软这个平台(生态环境)。

微软之于C#如同萧何之于韩信,成也萧何,败也萧何.

你可能感兴趣的:(JavaSE,数据类型,总结)