布尔类型(boolean、基本数据类型转换

 布尔类型也叫boolean类型,只有2种取值:false 、true.没有null(空)。不可以用0或者非0的整数替代false , true,这点与C语言不同。

boolean 类型占1个字节。

boolean 适用于逻辑运算,一般用于程序流程控制:

if 条件控制语句;

while 循环控制语句;

do-while 循环控制语句;

for 循环控制语句

public class Boolean01{
	// 编写一个main方法
	public static void main(String[]args){
		//演示判断成绩是否通过的案例
		//定义一个布尔变量isPass ,并赋值true
		boolean isPass = true;
		if(isPass == true) {
			System.out.println("考试通过,恭喜");
		} else {
			System.out.println("考试没有通过,下次努力");
		}
	}
}

基本数据类型转换

自动类转换:

当java 程序在进行赋值或者运算时,精度低的类型自动转换为精度高的数据类型,精度高的不能像精度低的转换,这个就是自动类型转换。
由低字节向高字节的转换

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

char-->int-->long-->float-->double

public class AutoConvert {
	//编写一个main 方法
	public static void main(String[]args) {
		//演示自动转换
		int num = 'a';
		double d1 = 80; 
		System.out.println(d1); // 80.0
		System.out.println(num); // 97
	}
}

自动类型转换注意和细节:

1、有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后进行计算。

2、当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换。

3、byte、short、char不可以相互转换、但是可以运算 运算时会转换成int类型

// 自动类型转换细节
public class AutoConvertDetail {
	//编写一个main方法
	public static void main(String[]args) {
		// 有多种类型的数据混合运算时,
		// 细节1:系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
		int n1 = 10;
		//float d1 = n1 + 1.1; // 报错。n1+1.1=>输出结果是double,double是精度最高的数据
		//double d1 = n1 + 2.2; //n1 + 2.2 结果类型是double
		float d1 = n1 + 2.2F; // n1 + 2.2 结果类型是float

        //细节2:当我们把精度高的数据类型赋值给精度小的数据类型时,就会报错;
        //int n2 = 1.1; //错误 double(高)向int(底精度)转换
        
        //细节3:(byte,short)和char 之间不会相互自动转换
        //当爸具体数赋值给byte,首先判断该数收否在byte 范围内,如果是就可以。
        byte b1 = 10;  // 对,范围在-128-127
        //int n2 = 1; // n2 是int
        //byte b2 = n2;//错误,原因:n2 是int 类型,不能向低精度数据自动转换
        // char c1 = b1; // 错误,原因; byte 不能自动转换成char
        
        // 细节4:byte ,short ,char 他们三者可以计算,在计算时首先转换为int 类型
        byte b2 = 1;
        short s1 = 1;
        //short s2 = b2 + s1; //错,b2 +s1=> int
        int s2 = b2 + s1; // 对
        byte b3 = 2;
        // byte b4 = b2 + b3 //报错:b2 + b3=>int
         
        //boolean 不参与转换
        boolean pass = true;
        //int num100 = pass; //boolean 不参与类型的自动转换
        //自动提升原则:表达式结果的类型自动提升位操作数中最大的类型
        byte b4 = 1;
        short s3 = 100;
        int num200 = 1;
        float num300 = 1.1F;

        // int num500 = b4 + s3 + num200 + num300;// 错误,float 无法转换为int.
        float num500 = b4 + s3 + num200 + num300;  // 对的,这里面操作数最大的是float
        double  num800 = b4 + s3 + num200 + num300; // 这里面操作数最大的是float ,所以可以有float转换为double .

        System.out.println((int)num800); //输出结果103
        System.out.println(num800); //输出结果103.0999984741211

	}
}

强制类型转换:

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(),但是可能造成精度降低或溢出。
语法格式:目标类型 变量 =(目标类型)源类型变量或常量

整数存原码,负数存补码

public class ForceConvert{
	// 编写一个main 方法
	public static void main(String[]args) {
		 //演示强制类型转换
		int n1 = (int)1.9;
		System.out.println("n1=" + n1);// 结果为1

		int n2 = 275;
		byte b1 = (byte)n2;
		System.out.println("b1=" + b1);// b1=-19

        int n3 = 1500;
		byte b2 = (byte)n3;
		System.out.println("b2=" + b2);// b2 = -36


	}
}
int转byte ,数据底层原理

int 类型变量n1,占4个字节,byte 类型变量b1占1个字节,当把int类型转换为byte 类型时,前面高3位字节的数据丢失,数值发生改变。

int(275)  00000000   00000000   00000001   00010011

byte(19)                                                           00010011     正数(原码、反码、补码一致)

int(1500)00000000   00000000   00000101   11011100

bye(-36)                                                               11011100  

11011100,首位的第一位是1表示负号。

在正整数中:源码 =反码 =补码

在负整数中:如果是负数,将源码的符号位不变,其余各位取反,得到反码

                      如果是负数,将反码+1,得到补码

1500的原码:00000000   00000000   00000101   11011100

1500的反码:00000000   00000000   00000101   11011100

1500的补码:00000000   00000000   00000101   11011100

强转位byte 后:11011100 ,现在是负数了

补码:11011100

反码:11011011

原码:10100100

8421码:128 64 32 16 8 4 2 1

 

8421码: 128 64 32 16 8 4 2 1

10100100,从右到左对应8421码:-(4+32)=-36

0

1

0

2

1

4

0

8

0

16

1

32

0

64

1

负号

强制类转换细节:

1、强转符号只针对最近的操作数有效,往往会使小括号提升优先级

2、char类型可以保存int 的常量,但是不能保存int 的变量值,需要强转。

public class ForceConvertDetail {
	//编写一个main 方法
	public static void main(String[]args) {
		// 演示强制类型转换
		//int x = (int)10*3.5+6*1.5  // 这里(int)只对10有提升作用,整体X的数据类型还是 double.
		int x = (int)(10*3.5+6*1.5);  // (int)44.0->44
		System.out.println(x);  //输出44

		char c1 = 100;
		int m = 100;
		//char c2 = m; // 报错
		char c3 =(char)m;
		System.out.println(c3);// 100对应的字符:d

	}
}

                                  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值