JAVA学习笔记(2)
一、基本数据类型
基本类型 | 所占字节数 |
---|---|
byte (字节型数据) | 1 |
short(整数型数据) | 2 |
int (整数型数据) | 4 |
long (长整数型数据) | 8 |
float(单精度浮点型数据) | 4 |
double(双精度浮点数型数据) | 8 |
char(字符型数据) | 2 |
boolean (布尔型数据) | 1 |
注:
- 在Java中,定义整数型数据时,如果字面量是十进制的数值,则会自动默认为int型;定义小数型数据时,如果字面量是小数的数值,则会自动默认为double型。
例:
class test
{
public static void main(String[] args)
{
byte b =(byte)300; //此行代码将 int 转换为了 byte ,精度丢失,byte 只能读取 300 二进制形式的 后八位。
//300 的二进制表示为 :1 0010 1100 。
//后八位:0010 1100 ,对应十进制为:44 。
System.out.println(b);
}
}
/*
运行结果:
44
*/
基础数据类型中的强制类型转换问题:
- long和int的区别
例:
class test
{
public static void main(String[] args)
{
long l = 7777777777; //整型的字面量会被默认为int型,7777777777超出了int的范围,故编译报错。
System.out.println(l);
}
}
/*
运行结果:
test.java:5: 错误: 过大的整数: 7777777777
long l = 7777777777;
^
1 个错误
*/
修改后:
class test
{
public static void main(String[] args)
{
long l = 7777777777l; //数值后加字母l(或L),表示此数为long型数据。
System.out.println(l);
}
}
/*
运行结果:
D:\myjava\ja>java test
7777777777
*/
- float 和 double
例:
class test
{
public static void main(String[] args)
{
float pi = 3.14; //字面量为小数,系统默认为double型
//double占8个字节,float只占4个字节,编译器报错。
double pi2 = 3.1415926;
System.out.println(pi);
System.out.println(pi2);
}
}
/*
test.java:5: 错误: 不兼容的类型: 从double转换到float可能会有损失
float pi = 3.14;
^
1 个错误
*/
修改后:
class test
{
public static void main(String[] args)
{
float pi = 3; //int型数据占4字节,float型数据也占4字节,可以通过。
double pi2 = 3.1415926;
System.out.println(pi);
System.out.println(pi2);
}
}
/*
运行结果:
D:\myjava\ja>java test
3.0
3.1415926
*/
注:float型数据占4个字节,long型数据占8个字节,float比long所表示的范围要大。
结论:在基础数据类型中,如果大转小,不强制类型转换,编译无法通过。
二、关于计算机内存中存储的二进制
在计算机内存中存储的二进制数值都是以补码的形式进行存储,在内存中第一位表示符号位,0表示正,1表示负。
- 对于一个正数:
其原码、反码、补码均一致。
例: 对于十进制数值 7 ,其原码、反码、补码:0000 0111 - 对于一个负数:
原码即为二进制形式。
反码是在其原码的基础上,符号位不变,其余各个位取反。
补码是在其原码的基础上,符号位不变,其余各个位取反 ,最后+1。(也即在反码的基础上+1)
例:对于十进制数值 -7
-7的原码:1000 0111
-7的反码:1111 1000
-7的补码:1111 1001
以上。