第二天JAVA基础语法 (2)变量,数据类型,自动类型转换

本文详细介绍了Java编程中的数据类型,包括基本数据类型及其取值范围,以及整数默认类型、浮点类型和字符型的细节。同时,文章探讨了变量的定义与自动类型转换规则,特别是涉及long和float类型的特殊处理。此外,还深入讲解了算术运算符、赋值运算符、比较运算符、逻辑运算符和位运算符的使用,并通过实例解析了运算过程。最后,文章通过三目运算符展示了条件判断的表达方式。
摘要由CSDN通过智能技术生成

1、变量:在程序的执行过程中,其值可以发生改变的量叫变量。
定义变量的格式:
(1)、数据类型 变量名 = 初始化值;
(2)、数据类型 变量名;
变量名 = 初始化值;

2、 数据类型:
基本数据类型

                                  (一个字节有8位)
          
           整数类型                  占用字节数         可表示的范围
                byte                     1            -2^7 ~ 2^7-1
                short                    2           -2^15 ~ 2^15-1
                int                      4           -2^31 ~ 2^31-1
                long                     8           -2^63 ~ 2^63-1
            浮点类型
                float                    4    -3.403*10^38 ~ 3.403*10^38
                double                   8   -1.798*10^308 ~ 1.798*10^308
            字符型
                char                     2   
            布尔型
                 boolean                 1
        引用数据类型(学习面向对象时再说)

  注意事项:
        1、整数默认是int类型
        2、如果要定义一个long类型的数据,末尾要加上L或者l,推荐L
        3、小数默认是double类型
        4、如果要定义一个float类型的数据,末尾要加上F或者f,推荐F

3、自动类型转换:
byte,short,char在参与运算的时候会自动提升到int类型
由大的数据类型接收小的数据类型,会自动转换,不会报错。( byte,short,char—int—long—float—double)
强制类型转换
由小的数据类型接收大的数据类型,会报错,接收不了,这时候需要强制类型转换
格式:目标数据类型 目标变量名 = (目标数据类型)要转换的数值/变量
eg : byte b1 = (byte) a;

 package com.shujia.wxl.day03
 /*
    byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
        有问题的,因为byte数据类型的范围是在-128~127之间,而130超出了范围。

 */
public class DataTypeDemo5 {
              public static void main(String[] args) {
 //        byte b = 130;

    byte b = (byte)130;
    System.out.println(b);  // -126
    b = (byte)131;
    System.out.println(b);

    byte b1 = (byte)300;
    System.out.println(b1); // 44
 }
}
/*

我们知道数据在计算机种运算的时候是采用补码的形式参数运算的,所以要知道130的补码
而想要知道补码,就得知道反码,原码,所以得求出130的二进制的表示:
130的二进制:10000010
由于整数默认是int类型,所以扩大字节
130的原码为:00000000 00000000 00000000 10000010
又由于最高位是0,所以它的原码,反码,补码都一样
130的补码:00000000 00000000 00000000 10000010
做截取操作:10000010 这是补码

    已知补码,求原码:
           符号位   数值位
    补码:    1     0000010
    反码:    1     0000001
    原码:    1     1111110

    最终结果为:11111110
    将它换算成十进制就是我们看到的结果:-126

*/
300的二进制:00000000 00000000 00000001 00101100
300的原码为: 1 00101100
最高位是0,所以原码,反码,补码都一样
300的补码为:00000000 00000000 00000001 00101100
做截取操作:00101100(这是补码)
已知补码,求原码:
符号位 数值位
补码: 0 0101100
反码: 0 0101100
原码: 0 0101100
最终结果为:0101100
将它换算成十进制就是我们能看到的结果:44

3、运算符:
(1)算术运算符:+,-,*,/,%,++,–,+(字符串相加)
+号的用法:
1、当加号两边都是数字或者是数字和字符的时候,这时候的+号做的是加法运算
2、当加号两边其中是字符串的时候,做的是字符串拼接,拼接后是一个新的字符串
3、字符串与任何数值做加法,做的是字符串拼接,拼接后是一个新的字符串
++:自加1
当++在前的时候,先自加1,再做赋值操作,当++在后的时候,先做赋值操作,再做自加1

–:自减1
当–在前的时候,先自减1,再做赋值操作,
当–在后的时候,先做赋值操作,再做自减

    int a = 10;
    int b = 10;
    int c = 10;
    a = b++; // a=10  ,b=11  ,c=10
    c = --a; // a=9  ,b=11  ,c=9
    b = ++a; // a=10  ,b=10  ,c=9
    a = c--; // a=9  ,b=10  ,c=8

(2) 赋值运算符:=,+=,-=,*=,/=,%=
short s=1, s = s+1;
short s=1, s += 1;
上面两个代码有没有问题,如果有,那里有问题
第一个有问题,因为变量参与运算,首先会提升数据类型,然后做运算。所以 s = s+1;s会提升到int类型然后再做加法运算,最终的结果是int类型,所以拿short类型接收会报错,所以要想成功赋值,就得强制类型转换。
第二个代码没有问题,是因为内部自动包含了强制类型转换,
s+=1 => s = (s的数据类型)(s+1)
(3) 比较运算符:
,>,<,>=,<=,!=

注意事项:
1、关系运算符的表达式的结果是一个boolean类型,要么是true,要么是false
2、==不能少写,一个=是赋值运算符,==才是关系运算符
3、赋值的时候要注意类型问题,关系运算符表达式的结果是boolean类型,所以接收的时候只能是boolean类型的变量接收

(4)逻辑运算符:&,|,^,!,&&,||
逻辑运算符的两边放的是boolean类型的值,计算的结果也是一个boolean类型的值
&: 参与运算的时候,两边有false,则false,两边都做运算
|: 参与运算的时候,两边有true,则true,两边都做运算
^: 参与运算的时候,相同为false,不同为true,两边都做运算
!: 将true变成false,false变成true
(5) 位运算符:&,|,^,~,<<,>>,>>>
<<: 左移,二进制左移,右边用0补齐,多出来的丢弃
>>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
>>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
<<: 左移,二进制左移,右边用0补齐
3的二进制:00000000 00000000 00000000 00000011
由于3是正数,所以原码,反码,补码都一样
3的补码:00000000 00000000 00000000 00000011
左移:
00000000 00000000 00000000 00000011
(00)00000000 00000000 00000000 00001100 (补码)
由于最高位是0,既是补码也是原码,所以结果是: 12

  ================================================================
  >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
  24的二进制:00000000 00000000 00000000 00011000
  由于24是正数,所以原码,反码,补码都一样
  24的补码:00000000 00000000 00000000 00011000
  右移:
          00000000 00000000 00000000 00011000
          0000000000 00000000 00000000 000110(00)  (补码)
  由于最高位是0,既是补码也是原码,所以结果是:6

  ================================================================
  >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
  -24的二进制:10000000 00000000 00000000 00011000
  已知原码求补码:
    原码:10000000 00000000 00000000 00011000
    反码:11111111 11111111 11111111 11100111
    补码:11111111 11111111 11111111 11101000
  右移:
        11111111 11111111 11111111 11101000
        1111111111 11111111 11111111 111010(00)  (补码)
  已知补码求原码:
    补码:11111111 11111111 11111111 11111010
    反码:11111111 11111111 11111111 11111001
    原码:10000000 00000000 00000000 00000110
    最终结果是:-6

    ==============================================================
    >>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
    -24的二进制:10000000 00000000 00000000 00011000
  已知原码求补码:
    原码:10000000 00000000 00000000 00011000
    反码:11111111 11111111 11111111 11100111
    补码:11111111 11111111 11111111 11101000
    无符号右移2位:
         11111111 11111111 11111111 11101000
         0011111111 11111111 11111111 111010(00)   (补码)
    由于最高位是0,所以它的原码,反码,补码都是一样的。
    最终结果位:0011111111 11111111 11111111 111010 = 1073741818

(6)三目运算符:(关系表达式)?表达式1:表达式2;
三目运算符:又称之为三元运算符
格式:(关系表达式)?表达式1:表达式2;
如果关系表达式的结果为true,运算后的结果是表达式1;
如果关系表达式的结果为false,运算后的结果是表达式2;

注意事项:
    1、三目运算符表达式的结果数据类型由三目运算符表达式1和表达式2中最大的数据类型决定的。
    2、关系表达式一定只能是boolean类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值