JAVA基础2——进制运算&数据类型&变量

常量

常量:在程序执行的过程中其值不可以发生改变

Java中常量的分类

  • 字面值常量

  • 自定义常量(面向对象部分讲)

    字符串常量——用双引号括起来的内容
    整数常量——所有整数
    小数常量——所有小数
    字符常量——用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号
    布尔常量较为特殊——只有truefalse
    空常量null(数组部分讲解)

public class Dome1_Constant {                  //constant 常量
    public static void main(String[] args){
        System.out.println("abc123;;;");       //字符串常量
        System.out.println(564566);            //整数常量
        System.out.println(456.456456);        //小数常量
        System.out.println('abc123;;;');       //''中必须放的是单个字符,10代表的是1字符和0字符
        System.out.println('');                //中什么也不放,也是不可以的,因为代表不了任何字符
        System.out.println(' ');               //带表空格字符
        System.out.println(true);              //boolean类只有两个值,true和fals
        System.out.println(false);
    }
}

下面是错误提示:
在这里插入图片描述

进制转换

二进制
由0,1组成。以0b(b可以大写也可以小写)开头(JDK1.7版本可以表示二进制了)

八进制
由0…7组成。以0开头

十进制
由0…9组成。整数默认是十进制的

十六进制
由0…9,a,b,c,d,e,f(大小写均可)。以0x开头

任意进制到十进制的转换原理
系数:就是每一位上的数据。
基数:x进制,基数就是x。
权:在右边,从0开始编号,对应位上的编号即为该位的权。
结果:把系数×基数的权次幂相加即可。

十进制到其他进制转换
规律:除基取余,直到商为0,最后,余数反转就是结果。

8421快速转换法

11111111
1*271*261*251*241*231*221*211*20
1286432168421

十进制到其他进制时先转为二进制,然后二进制再转换为其他进制

104=64+32+8=01101000

二进制到八进制:
从右往左,每三位一组合,左边不够用0补。
把组合后的每一位换算成十进制数据。
最后,从左往右,把结果进行组合即可。

01101000=001 101 000=150

二进制到十六进制:
从右往左,每四位一组合,左边不够用0补。
把组合后的每一位换算成十进制数据。
最后,从左往右,把结果进行组合即可。
对应位上的数据,应该是十六进制的。

01101000=0110 1000=68

原反补码

原码:是二进制数的有符号表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

举例符号位数值位
+70000 0111
-71000 0111

在计算机中,数值一律用补码来表示(存储)。

主要原因:

  • 使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。
  • 另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

正数:原反补码相同

负数

反码符号位不变,数值位按位取反,0变1,1变0。

举例符号位数值位
+70000 0111
-71111 1000

补码 =反码加1

举例符号位数值位
+70000 0111
-71111 1001

变量

声明变量的格式:

  • 数据类型 变量名 = 初始化值;
	byte b = 10;
	System.out.println(b);
  • 数据类型 变量名;
    变量名 = 初始化值;
    使用变量
   byte b;
   b = 20;
   System.out.println(b);

数据类型

分类

  • 基本数据类型
  • 引用类型(类,接口,数组)

基本数据类型
4类8种,区别在于他们在内存中的存储空间大小不一样。

类别种类名称占位范围说明
整数字节byte占1个字节-128~127
短整型short占2个字节-215~215-1
整型int占4个字节-231~231-1
长整型long占8个字节-263~263-1其后跟L或者l标示
浮点数单精度float占4个字节-3.403E38~3.403E38其后跟F或者f标示
双精度double占8个字节-1.798E308~1.798E308
字符char占2个字节0~65535
布尔boolean占1个字节理论上是占1/8个字节,但java中没指定其大小true\false

注意:整型默认是int;浮点型默认是double。

public class Dome1_DataType {
    public static void main(String[] args){
        //整数
        byte b=127;								
        int i=43524;							
        long l=5345768342L;						//后面最好标注大写L
        short s=5635;							
        System.out.println(b);
        System.out.println(i);
        System.out.println(l);
        System.out.println(s);
        //浮点数
        float f=3242.234234234F;				//后面最好标注F or f
        double d=234234.2352342342342357658;	
        System.out.println(f);
        System.out.println(d);
        //字符
        char c='a';
        System.out.println(c);
        //布尔
        boolean b1=true;
        boolean b2=false;
        System.out.println(b1);
        System.out.println(b2);
    }
}
  • 作用域问题 : 同一个区域不能使用相同的变量名
  • 初始化值问题 : 局部变量在使用之前必须赋值
  • 一条语句可以定义几个变量

数据类型转换

数据参与运算

参与运算的数据类型要一致。

转换规则

  • 布尔型不能参与运算

  • 整形,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:

    • 容量小的类型默认转换为容量大的数据类型;
    • 数据类型按容量大小排序为:
      byte,short,char-<int-<long-<float-<double
      byte,short,char之间不会互相转换,他们三者在计算时首先会转换为int类型
  • 容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意

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

public class Dome_DataTypeConversion {      	//conversion 转换
    public static void main(String[] args){

        //隐式转换
        int a=8;
        byte b=10;
        a=a+b;
        System.out.println(a);

        //强制转换
        int x=9;
        byte y=7;
        y= (byte) (x+y);
        System.out.println(y);

        byte b1= (byte) (120+79);
        byte b2=(byte)300;
        System.out.println(b1);
        System.out.println(b2);
    }
}

错误代码示范

public class Dome1_DataTypeConverson1 {
    public static void main(String[] args){
        byte x1=3;
        byte x2=6;
        byte x3=x1+x2;
        /*  1,byte与byte(或short,char)进行运算的时候会提升为int,两个int类型相加的结果也是int类型
            2,x1和x2是两个变量,变量存储的值是变化,在编译的时候无法判断里面具体的值,相加有可能会超出byte的取值*/
        byte x4=3+6;
        System.out.println(x3);
        System.out.println(x4);		//x4可以正常输出的原因是java有常量优化机制
    }
}

错误提示:在这里插入图片描述

注意:
变量无法直接运算,而常量可以
因为java有常量优化机制

float为什么比long大?

long有8个字节而float有4个字节
IEEE754规定
4个字节是32个二进制位 1位是符号位 8位是指数位 23位是尾数位
00000000——11111111
0到255 其中0代表0 255代表无穷大
1到254每个指数位减去127
-126到127

long: 2 63 − 1 2^{63}-1 2631
float: 3.4 × 1 0 38 &gt; 2 × 1 0 38 &gt; 2 × 8 38 = 2 × 2 3 38 = 2 × 2 114 &gt; 2 63 − 1 3.4×10^{38}&gt;2×10^{38}&gt;2×8^{38}=2×{2^3}^{38}=2×2^{114}&gt;2^{63}-1 3.4×1038>2×1038>2×838=2×2338=2×2114>2631

它们底层的存储结构不同。
float表示的数据范围比long的范围要大

字符和字符串运算规则

public class Dome_DataTypeConversion2 {
        public static void main(String[] args){
            System.out.println('a'+1);          //98,因为有ASCII码表,a字符对应的是int类型的97
            System.out.println((char)('a'+1));
            System.out.println("he11o"+'a'+1);  //任何数据类型用+与字符串相连接都会产生新的字符串
            System.out.println('a'+1+"hello");
            System.out.println("5 + 5 = " + ( 5 + 5 ));
        }
}

运行结果如下

在这里插入图片描述
Java语言中的字符char可以存储一个中文汉字吗?
可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节。所以,Java中的字符可以存储一个中文汉字

//char类型是否可以存储中文
char c='中';
System.out.println(c)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值