java_day2_常量,变量,数据类型,运算符

w-ll 2024-09-18 15:09:00 阅读 87

一、常量

<code>常量:在Java程序运行过程中其值不能发生改变的量

分类:

1、字面值常量:

整数常量 表示所有的整数,包括负数 10 -8

小数常量 表示所有的小数 1.23 -3.14

布尔常量 true false

空常量 null

字符常量 表示由单引号括起来的单个字符 'a' '刘'

2、自定义常量

常见的单位转换:

1byte = 8bit

1kb = 1024byte

1mb = 1024kb

1gb = 1024mb

1tb = 1024gb

1pb = 1024tb

java针对整数常量,提供4种表现形式:

二进制:由0,1构成,逢2进1,由0b开头

八进制:由0,1,2,3,4,5,6,7构成,逢8进1,由0开头

十进制:由0,1,2,3,4,5,6,7,8,9构成,逢10进1,默认就是10进制

十六进制:由0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f构成,逢16进1,由0x开头

进制之间的转换

1、其他进制转10进制 规律:每一位上的系数乘上自身进制的幂次方之和

12345【10进制】 -> 【10进制】?12345

12345 = 10000 + 2000 + 300 +40 + 5

= 1*10^4 + 2*10^3 + 3*10^2 + 4*10^1 + 5*10^0

= 10000 + 2000 + 300 + 40 + 5

= 12345

2、10进制转其它进制 规律:除基取余,直到商为0,余数反转

3、10进制与2进制之间的快速转换:8421码

1 1 1 1 1 1 1 1

128 64 32 16 8 4 2 1

10110011 -> 128 + 32 + 16 + 2 + 1

4、其他进制到其他进制 如:2进制到8进制

方案1、先转10进制,再转8进制

10011-> 16 + 2 + 1 = 19

19/8= 2...3

2/8 = 0...2

方案2:先转2进制,若转8进制,每3位一组合,转10进制拼接;若转16进制,每4位一组合,转10进制拼接

举例:10011【2进制】 -> 【8进制】023

010-> 2 011-> 3

10011【2进制】 -> 【16进制】0x13

0001-> 1 0011-> 3

举例:-7 + 3 = -4

java针对2进制而言,负数和正数的表现形式不一样的,并且在计算机底层计算过程中,数据都是采用补码进行计算的

要想知道一个数值的补码,就必须先知道该数值的反码,要想知道一个数值的反码,就必须先知道该数值的原码。

原码:

正数的原码与二进制值保持一致,最高位为0;

负数的原码数值位与正数一致,最高位是1。

举例:

符号位 数值位

-7的原码:1 0000111

3的原码: 0 0000011

反码:

正数的反码与原码保持一致;

负数的反码,再原码的基础上,符号位不变,数值位按位取反

举例:

符号位 数值位

-7的反码:1 1111000

3的反码: 0 0000011

补码:

正数的补码与原码保持一致;

负数的补码,再反码的基础之上,末位+1

举例:

符号位 数值位

-7的补码:1 1111001

3的补码: 0 0000011

11111001

+

00000011

--------------

补码: 11111100

最终计算机是最终原码转10进制之后的结果

符号位 数值位

补码: 1 1111100

反码: 1 1111011

原码: 1 0000100

-------------------------

-4

二、变量、数据类型

Java是一门强类型语言。

变量:指的是在java程序运行过程中,其值可以发生改变的量

定义一个变量的语句

数据类型 变量名 = 初始化值;

数据类型:

基本数据类型:

整数类型: 所占字节数 可表示范围

byte 1 -2^7 ~ 2^-1

short 2 -2^15 ~ 2^15-1

int 4 -2^31 ~ 2^31-1

long 8 -2^63 ~ 2 ^63-1

小数类型:

float 4

double 8

布尔类型:

boolean 1

字符类型: 根据具体的编码来定,不同的编码下,java中一个字符所占的字节数是不同的

引用数据类型:

使用变量的注意事项:

1、变量要进行初始化赋值,才可以使用

2、在同一作用域下,变量名不能重复,可以大小写不一样,严格区分大小写

3、Java中整数默认是int类型,要想定义一个long类型的变量,需要在值的末尾加上l或L

4、Java中小数默认是double类型,要想定义一个float类型的变量,要在值的末尾加上f或F

`

public class DataTypeDemo1 {

public static void main(String[] args) {

//数据类型 变量名 = 初始化值;

//定义一个byte类型的变量

byte b1 = 100;

// b1 = 120;

// byte b1;

// byte B1 = 110;

System.out.println(b1); // 直接打印这个变量,实际上打印的是该变量存储的值

//定义一个short类型的变量

short s1 = 200;

System.out.println(s1);

//定义一个int类型的变量

int i1 = 300;

System.out.println(i1);

// int i2 = 30000000000;

long i2 = 30000000000L;

System.out.println(i2);

//定义一个float类型的变量

float f1 = 12.34F;

System.out.println(f1);

//定义一个double类型的变量

double d1 = 33.45;

System.out.println(d1);

//定义一个布尔类型的变量

boolean b2 = true;

System.out.println(b2);

//创建一个字符变量

char c1 = 'a';

System.out.println(c1);

}

}

`

数据类型转换:

在Java中,变量参与运算时,会先自动提升数据类型

自动数据类型转换:

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

强制数据类型转换:

目标数据类型 变量名 = (目标数据类型)(要转型的值或表达式)

注:会损失精度

public class DataTypeDemo2 {

public static void main(String[] args) {

//哪句是编译失败的呢?为什么呢?

// byte b1=3,b2=4,b; //不推荐这么定义

//工作的时候,推荐一个变量定义占用一行

byte b1=3;

byte b2=4;

byte b;

// b=b1+b2; // 如果是变量参与运算,会先自动类型转换,做完运算后,再判断是否可以进行赋值

//强制类型转换

b=(byte)(b1+b2);

System.out.println(b);

// b=3+4; // 如果是常量参与运算,会先进行运算,运算后,会判断结果是否在范围内,如果在直接赋值

}

}

计算机中的数据都是采用补码进行运算的

130的补码:00000000 00000000 00000000 10000010

做强制类型转换:

补码: (00000000 00000000 00000000) 10000010

补码: 10000010

已知补码求原码:

符号位 数值位

补码: 1 0000010

反码: 1 0000001

原码: 1 1111110

-----------------------------

64 + 32 + 16 + 8 + 4 + 2 = 126

因为符号位是1,所以最终的结果是-126

注意:

1、+ 号两边若都没有字符串,这个就是最普通的算数加法运算

2、若有字符参与算数运算的话,java虚拟机会将该字符所对应的ASCII码表中的数值进行转换

记住三个特殊的字符对应的ASCII码值:

'0' - 48

'A' - 65

'a' - 97

3、同级别优先级的符号,从左向右进行运算

4、+ 号两边若任意一边是字符串,而是做字符串的左右拼接操作,拼接结束后是一个新的字符串

public class DataTypeDemo4 {

public static void main(String[] args) {

//代码格式化的快捷键:ctrl + alt + L

// System.out.println('a'); // a

// System.out.println('a' + 1); // 98

System.out.println("hello" + 'a' + 1); // helloa1

System.out.println('a' + 1 + "hello"); // 98hello

System.out.println("5+5=" + 5 + 5); // 5+5=55

System.out.println(5 + 5 + "=5+5"); // 10=5+5code>

System.out.println("5+5=" + (5+5)); // 5+5=10

}

}

三、赋值

赋值运算符:

= += -= *= /= %=

public class FuZhiDemo1 {

public static void main(String[] args) {

int a = 3;

// a += 4;

// System.out.println(a);

a-=5;

System.out.println(a);

}

}

四、算数运算符

算数运算符:

+ - * / % ++ --

java中,一个算数表达式最终的结果数据类型,是由参与运算最大的那个参数类型决定的

++: 自加1

++在后,先赋值再进行自加1;++在前,先自加1,再赋值参与运算

--: 自减1

--在后,先赋值再进行自减1;--在前,先自减1,再赋值参与运算

五、关系运算符

关系运算符:

> < >= <= == !=

**关系表达式的结果一定是Boolean类型的**

六、逻辑运算符

逻辑运算符:

& | ^ ! && ||

**参与运算的参数类型都是Boolean,结果也是一个Boolean类型 **

& : 有false则false

|: 有true则true

^ : 相同则false,相反则true

!: 将true变false,false变true

&&: 左边为false时,右边表达式不会执行,结果为false

||: 左边为true时,右边表达式不会执行,结果为true

七、三目运算符

三目运算符【三元运算符】:

语句定义格式:

(关系表达式)?表达式1:表达式2;

这里的表达式1和表达式2必须是要有一个结果值的。

public class SanMuDemo1 {

public static void main(String[] args) {

int a = 3;

int b = 8;

//需求:求两个数中的最大值

int x = (a > b) ? a : b;

System.out.println(x);

}

}

八、位运算符

位运算符:针对数值二进制形式的计算

& | ^ >> << >>>

参与运算的是数值结果也是一个数值

计算机中所有的运算都是采用补码进行的

3的补码:00000000 00000000 00000000 00000011

4的补码:00000000 00000000 00000000 00000100

&:有0则0

00000000 00000000 00000000 00000011

&

00000000 00000000 00000000 00000100

-------------------------------------

00000000 00000000 00000000 00000000

|:有1则1

00000000 00000000 00000000 00000011

|

00000000 00000000 00000000 00000100

-------------------------------------

00000000 00000000 00000000 00000111

^:相同则0,不同则1

00000000 00000000 00000000 00000011

^

00000000 00000000 00000000 00000100

-------------------------------------

00000000 00000000 00000000 00000111

~: 0变成1,1变成0

00000000 00000000 00000000 00000011

~

-------------------------------------

补码 11111111 11111111 11111111 11111100

反码 11111111 11111111 11111111 11111011

原码 10000000 00000000 00000000 00000100

-----------------------------------------

-4

>>:右移,整体补码向右移动若干位,右边多出的部分丢弃,若最高位是1,左边就用1补齐;反之用0补齐

<<:左移,整体补码向左移动若干位,左边多出的部分丢弃,右边用0补齐

>>>:无符号右移,整体补码向右移动若干位,右边多出的部分丢弃,左边无论最高位是0还是1,都用0补齐

24的补码:00000000 00000000 00000000 00011000

00000000 00000000 00000000 00011000

>>2: 00000000 00000000 00000000 00000110(00)

------------------------------------------------

2的补码:00000000 00000000 00000000 00000010

00000000 00000000 00000000 00000010

<<4: (0000)00000000 00000000 00000000 00100000

-24

原码:10000000 00000000 00000000 00011000

反码:11111111 11111111 11111111 11100111

补码:11111111 11111111 11111111 11101000

------------------------------------------

11111111 11111111 11111111 11101000

>>>2: 0011111111 11111111 11111111 111010(00)



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。