1.Java概述\数据类型(种类、范围、进制、转换)\运算符

1. JDK、JRE、JVM之间的关系

JDK(JavaDevelopmentKit):Java开发工具集

JRE(JavaRuntimeEnvironment):Java运行环境

JVM(JavaVirtualMachine):Java虚拟机

 我们想要运行一个已有的Java程序,那么只需安装JRE 即可。

我们想要开发一个全新的Java程序,那么必须安装JDK ,其内部包含JRE

2. 基本语法

2.1数据类型

基本数据类型:四类八种

 

是否加 l/L以及F

  •  long类型的值,可以加 l/L 也可以不加

         long x1 = 2147483647;  // 如果数字没有超出 int的范围,l/L可以不加
         long x2 = 2147483648L;  // 如果数字超出了 int的范围,l/L必须要加

  •  float类型的浮点数,后面要加 f/F

        浮点数有两个类型 float/double, 默认是 double

计算机存储单位:

  • 位(bit): 数据存储的最小单位
  • 字节(Byte):计算机的基本存储单位(是计算机信息技术用于计量存储容量的一种计量单位 )
  • 1 Byte = 8 bit

2.2 各数据类型的取值范围:

 进制之间的转换:

/*
不同进制数字的表示方式
java里可以表示  二进制 / 八进制 / 十进制 以及 十六进制

System.out.println() 如果打印的是数字,都是以 十进制 的形式输出
*/
class IntDemo2 {
    public static void main(String[] args) {
        int a = 17;  // 如果没有特殊说明,数字默认都是十进制
        System.out.println(a);

        int b = 0b10101010;  // 以0b/0B开头的数字是二进制
        System.out.println(b);  // 170

        int c = 045;  // 以 0 开头的数字是 八进制
        System.out.println(c);  // 37

        int d = 0xA;  // 以 0x开头的数字是 十六进制
        System.out.println(d);  // 10
    }
}

2.3 基本数据类型转换

byte / short / char 之间做运算,得到的结果是int类型.

 

// 强制类型转换
int i4 = 18;
byte x1 = (byte)i4;  // 强制将 int类型的i4转换称为byte类型的x1
System.out.println(x1);  // 18 把int强制转换称为byte以后,精度没有丢失

int i5 = 138; // i5的二进制表示形式 00000000 00000000 00000000 10001010
byte x2 = (byte)i5;  // 10001010
System.out.println(x2);  // -118  int强制转换称为byte以后,精度丢失了
    
int i6 = 259;  // i6的二进制表示形式  00000000 00000000 00000001 00000011
byte x3 = (byte)i6;  // 00000011
System.out.println(x3);  // 3

        
int i7 = 10;
int i8 = 3;
System.out.println(i7 / i8);  // 3
        
// 范围大的数据和范围小的数据做运算,得到的结果是范围大的
System.out.println( ((double)i7) / i8);

int i9 = 123456786;
System.out.println((float)i9);

3.运算符

  • 按照功能分:

算术运算符、赋值运算符、比较运算符、逻辑运算、条件运算符...

  • 按照操作数个数分:
    • 一元运算符:操作数只有一个,例如:正号(+a),负号(-a),自增(++a,a++),自减(--a,a--),逻辑取反(!true)等

    • 二元运算符:操作数有两个,例如:加(a+b),减(a-b),乘(a*b)等

    • 三元运算符:条件 ? 结果1 : 结果2

自增(减)运算符: 
    相同点: 无论是前自增还是后自增,a的值都会加1
    前自增运算符 ++a   先自增,后赋值
    后自增运算符 a++   先赋值,后自增

3.1 位运算符

位运算符运算规则
&按位与,同为1则为1,否则为0
|按位或,只要有一个为1则为1,否则为0
~按位取反,将操作数的每个位(包括符号位)全部取反
^按位异或,相同时返回0,不同时返回1
<<左移运算符
>>右移运算符
>>>无符号右移运算符

位运算符:用于数字的

如何区分&,|,^是逻辑运算符还是位运算符?

如果操作数是boolean类型,就是逻辑运算符,如果操作数是整数,那么就位运算符。

按位取反: 0变成1,1变成0  ~a 的结果是 -(a + 1)
左移运算:  m << n 结果是  m 乘以 2 的 n 次方
右移运算:  m >> n 结果是  m 除以 2 的 n 次方
无符号右移: m >>> n   对于正数来说,右移和无符号右移结果是一样的
    负数的无符号右移

System.out.println(~4);  // 按位取反-5
System.out.println(3 << 2);  // 12  3*2^2

// 正数的 >> 和 >>> 效果是一样的
System.out.println(46 >> 3);  // 5   46/(2^2)
System.out.println(46 >>> 3);  // 5

// 对于负数来说,无符号右移左边会使用 0 来补齐
System.out.println(-46 >> 3);  // -6
System.out.println(-46 >>> 3); // 536870906

3.1.1 左移

运算规则:左移几位就相当于乘以2的几次方

注意:当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位

3<<4  类似于  3*2的4次= 3*16 = 48

 -3<<4  类似于  -3*2的4次= -3*16 = -48

 3.1.2 右移

快速运算:类似于除以2的n次,如果不能整除,向下取整

69>>4  类似于  69/2的4次 = 69/16 =4

-69>>4 类似于 -69/2的4次 = -69/16 = -5

  3.1.3 无符号右移:>>>

运算规则:往右移动后,左边空出来的位直接补0,不看符号位

正数:和右移一样

负数:右边移出去几位,左边补几个0,结果变为正数

69>>>4  类似于  69/2的4次 = 69/16 =4

-69>>>4   结果:268435451

   3.1.4 按位与:&

运算规则:对应位都是1才为1

1 & 1 结果为1

1 & 0 结果为0

0 & 1 结果为0

0 & 0 结果为0

 9&7 = 1

-9&7 = 7

    3.1.5 按位或:|

运算规则:对应位只要有1即为1

1 | 1 结果为1

1 | 0 结果为1

0 | 1 结果为1

0 & 0 结果为0

9|7  结果: 15

-9|7 结果: -9

3.1.6  按位异或:^

运算规则:对应位一个为1一个为0,才为1

1 ^ 1 结果为0

1 ^ 0 结果为1

0 ^ 1 结果为1

0 ^ 0 结果为0

9^7  结果为14

 

-9^7 结果为-16

3.1.7 按位取反

运算规则:

~0就是1

~1就是0

~9  结果:-10

 

~-9  结果:8

 案例:

人类能够感知到的颜色几乎都是由红绿蓝(RGB)三种颜色调和而成的,在计算机里使用 [0,255] 的十六进制来表示颜色。例如 0xFF0000,0x00FF00,0x0000FF分别表示纯红,纯绿和纯蓝色。

思考: 已知颜色 int color = 0xEFAC3D; 使用代码分别获取代码里的RGB值。

class OperatorTest2 {
    public static void main(String[] args) {
        int color = 0xEFAC3D;
        
        // 通过算法从 color 里得到 RGB 的值
        int red = color >> 16;
        // int green = (color >> 8) & 0xFF;
        int green = (color & 0xFF00) >> 8;
        int blue = color & 0xFF;
        System.out.println("red = " + red + ",green = " + green + ",blue = " + blue);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值