位运算及进制转换
目录- 位运算及进制转换
1.1 标识符的命名规则和规范
1.1.1 标识符概念
- Java对各种变量、方法和类等命名时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫做标识符 int num = 88;
1.1.2 标识符的命名规则
- 由26个英文字母大小写,0-9,_或$组成
- 不可以以数字开头。int 3ab = 1; //错误
- 不可以使用关键字和保留字。但能包含关键字和保留字
- Java中严格区分大小写,长度无限制。int totalNum = 10; int n = 90;
- 标识符1不能包含空格。 int a b = 10;//错误
1.1.3 练习(判断变量名是否正确)
abc //ok
abc123 //ok
1abc //no 不能以数字开头
a-h //no 不能用-
a h //no 不能有空格
s$3 //ok
class //no 不能使用关键字
int //no 不能使用关键字
public //no 不能使用关键字
double //no 不能使用关键字
static //no 不能使用关键字
goto //no 不能使用保留字
stu_name //ok
1.1.4 标识符命名规范
1)包名:多单词组成时所有字母都小写:aaa.bbb.ccc //比如: com.hsp.com
2)类名、接口名:多单词组成时,所有单词首字母大写:XxxYyyZzz[大驼峰] //比如:TankShotGame
3)变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz[小驼峰,简称 驼峰法] //比如:tankShotGame
4)常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ 比如:定义一个所得税率 TAX_RATE
1.2 关键字
关键字的定义和特点(不用背
)
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有的字母都为小写
用于定义数据类型的关键字
class | interface | enum | byte | short |
---|---|---|---|---|
int | long | float | double | char |
boolean | void |
用于定义数据类型值的关键字
true | false | null |
---|---|---|
用于定义流程控制的关键字
if | else | switch | case | default |
---|---|---|---|---|
while | do | for | break | continue |
return |
用于定义访问权限修饰符的关键字
private | protected | public |
---|---|---|
用于定义类、函数、变量修饰符的关键字
abstract | final | static | synchronized |
---|---|---|---|
用于定义类与类之间的关键字
extends | implements |
---|---|
用于定义建立实例及引用实例,判断实例的关键字
new | this | super | instanceof |
---|---|---|---|
用于异常处理的关键字
try | catch | finally | throw | throws |
---|---|---|---|---|
用于包的关键字
package | import |
---|---|
其他修饰符的关键字
native | strictfp | transient | volatile | assert |
---|---|---|---|---|
1.3 保留字
1.3.1 介绍
Java保留字:现有Java版本尚未使用
,但以后版本可能会作为关键字使用
。自己命名标识符要避免使用这些保留字byValue、cast、future、generic、inner、operator、outer、rest、var、goto、const。
1.4 键盘输入语句
1.4.1 介绍
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java,需要一个扫描器(对象),就是Scanner。
1.4.2 步骤
1)导入该类的所在包,java.util.*
2)创建该类对象(声明对象)
3)调用里面的功能
1.4.3 案例演示
要求:可以从控制台接收用户信息,【姓名,年龄,薪水】
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
/*
步骤:
1.导入Scanner类 所在的包
2.创建Scanner对象,new创建一个对象
3.接收用户输入,使用相关方法
*/
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入姓名:");
String name = myScanner.nextLine();//接收用户输入的字符串
System.out.println("请输入年龄:");
int age = myScanner.nextInt();//接收用户输入的年龄
System.out.println("请输入薪水");
double sal = myScanner.nextDouble(); //接收用户输入的薪水
System.out.println("人的信息如下:");
System.out.println("名字=" + name + " 年龄=" + age + " 薪水=" + sal);
}
}
1.5 进制(程序员的基本功)
1.5.1 进制介绍
对于整数,有四种表示方式:
二进制:0,1。满2进1,以0b或0B开头
。
十进制:0-9。满10进1
八进制:0-7。满8进1,以数字0开头表示
。
十六进制:0-9 及 A(10)-F(15)。满16进1,以0x或0X开头表示
,此处的A-F不区分大小写。
1.5.2 演示四种进制
public class BinaryTest {
public static void main(String[] args) {
//n1 二进制
int n1 = 0b1010;
//n2 十进制
int n2 = 1010;
//n3 八进制
int n3 = 01010;
//n4 十六进制
int n4 = 0x1010;
System.out.println("n1=" + n1);
System.out.println("n2=" + n2);
System.out.println("n3=" + n3);
System.out.println("n4=" + n4);
System.out.println(0x23A);
}
}
1.5.3 进制的图示
十进制 | 十六进制 | 八进制 | 二进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 2 | 2 | 10 |
3 | 3 | 3 | 11 |
4 | 4 | 4 | 100 |
5 | 5 | 5 | 101 |
6 | 6 | 6 | 110 |
7 | 7 | 7 | 111 |
8 | 8 | 8 | 1000 |
9 | 9 | 11 | 1001 |
10 | A | 12 | 1010 |
11 | B | 13 | 1011 |
12 | C | 14 | 1100 |
13 | D | 15 | 1101 |
14 | E | 16 | 1110 |
15 | F | 17 | 1111 |
16 | 10 | 20 | 10000 |
17 | 11 | 21 | 10001 |
1.5.4 进制的转换(基本功)
进制转换的介绍
-
第一组
1)二进制转十进制
2)八进制转十进制
3)十六进制转十进制
-
第二组
1)十进制转二进制
2)十进制转八进制
3)十进制转十六进制
-
第三组
1)二进制转八进制
2)二进制转十六进制
-
第四组
1)八进制转二进制
2)十六进制转二进制
1.6 其他进制转十进制
1.6.1 二进制转十进制
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
案例:请将0b1011转成十进制的数
0b1011 = 1 * 2⁰ + 1 * 2¹ + 0 * 2² + 1 * 2³ = 1 + 2 + 0 + 8 = 11
1.6.2 八进制转十进制
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。
案例:请将0234转成十进制的数
0234 = 4 * 8⁰ + 3 * 8¹ + 2 * 8² = 4 + 24 + 128 = 156
1.6.3 十六进制转十进制
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
案例:请将 0x23A 转成十进制的数
0x23A = 10 * 16⁰ + 3 * 16¹ + 2 * 16² = 10 + 48 + 512 = 570
小练习:请将
0b 1 1000 1100 转成 十进制
1 * 2² + 1 * 2³ + 1 * 2⁷ + 1 * 2⁸ = 256 + 128 + 8 + 4 = 396
0 2456 转成十进制
6 * 8⁰ + 5 * 8¹ + 4 * 8² + 2 * 8³ = 6 + 40 + 256 + 1024 = 1326
0x A45 转成十进制
5 * 16⁰ + 4 * 16¹ + 10 * 16² = 5 + 64 + 2560 = 2629
1.7 十进制转其他进制
1.7.1 十进制转二进制
规则:将该数不断除以2,直到商为0为之,然后将每步得到的余数倒过来,就是对应的二进制。
案例:请将 34 转成二进制 = 0B00100010
1.7.2 十进制转八进制
规则:将该数不断除以 8,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的八进制。
案例:请将 131 转成八进制 => 0203
1.7.3 十进制转十六进制
规则:将该数不断除以 16,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的十六进制。
案例:请将 237 转成十六进制 => 0xED
小练习:
123 转成 二进制 => 0b 111 1101
678 转成 八进制 => 0 1246
8912 转成 十六进制 => 0x 22D0
1.8 二进制转八、十六进制
1.8.1 二进制转八进制
规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
案例:请将 ob11010101 转成八进制
ob11(3)010(2)101(5) => 0325
1.8.2 二进制转十六进制
规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
案例:请将 ob11010101 转成十六进制
ob1101(D)0101(5) = 0xD5
课堂练习:请将
0b11100101 转成 八进制
0b1110010110 转成 十六进制
1.9 八、十六进制转二进制
1.9.1 八进制转二进制
规则:将八进制数每 1 位,转成对应的一个 3 位的二进制数即可。
案例:请将 0237 转成二进制
02(010)3(011)7(111) = 0b10011111
1.9.2 十六进制转二进制
规则:将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可。
案例:请将 0x23B 转成二进制
0x2(0010)3(0011)B(1011) = 0b001000111011
课堂练习:请将
01230 转成 二进制
0xAB29 转成二进制
1.10 原码、反码、补码(重点 难点)
1.10.1 二进制在运算中的说明
1)二进制是逢2进位的进位制,0、1是基本算符。
2)现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary) 数用0和1两个数字及其组合来表示任何数。进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。
1.10.2 原码、反码、补码要点
对于有符号的来说:
1)二进制的最高位是符号位:0表示正数,1表示负数(口诀:0->0,1->-[0倒过来还是0,1倒过来变成负数])
2)正数的原码,反码,补码都一样(三码合一)
3)负数的反码 = 原码符号位不变,其他位按位取反(0变1,1变0)
4)负数的补码 = 负数的反码 + 1,负数的反码 = 负数的补码 - 1
5)0的反码,补码都是0
6)Java没有无符号数,换言之,Java中的数都是有符号的
7)在计算机运算的时候,都是以补码的方式来运算
的
8)当我们看运算结果的时候,要看他的原码
(重点)
1.12 位运算
1.12.1 简单思考题
- 请看下面的代码段,回答 a,b,c,d,e 结果是多少?
public class BitOperator01 {
public static void main(String[] args) {
int a = 1 >> 2; //向右位移2位
int b = -1 >> 2; //算术右移
int c = 1 << 2; //向左位移2位
int d = -1 << 2; //算术左移
int e = 3 >>> 2; //无符号右移
//a,b,c,d,e 结果是多少
System.out.println("a="+a); //0
System.out.println("b="+b); //-1
System.out.println("c="+c); //4
System.out.println("d="+d); //-4
System.out.println("e="+e); //0
}
}
- 请回答在 Java 中,下面的表达式运算的结果是: (位操作)
~2=? // 按位取反
2&3=?// 2 按位与 3
2|3=?
~-5=?
13&7=?
5|4=?
-3^3=?//^ 按位异或
1.12.2 位运算符介绍
Java中有7个位运算(&、|、^、~、>>、<< 和 >>>)
1.12.3 >>、<< 和 >>> 的运算规则
1)算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
2)算术右移<<:符号位不变,低位补0
3)>>> 逻辑右移也叫无符号右移,运算规则是: 低位溢出,高位补 0
- 特别说明:没有 <<< 符号
1.12.4 应用案例 BitOperator01.java
-
int a=1>>2; //1 => 00000001 => 00000000 本质 1 / 2 / 2 =0
-
int c=1<<2; //1 => 00000001 => 00000100 本质 1 * 2 * 2 = 4
1.13 本章作业
一、计算下列表达式的结果
10 / 3 = 3; 10 % 2 = 0;
10 / 5 = 2; -10.5 % 3 = ;
a % b当a是小数时,公式 = a - (int)a / b * b
-10.5 % 3 = -10.5 - (-10) / 3 = -10.5 + 9 = - 1.5
注意:有小数运算,得到结果是近似值
二、试说出下面代码结果
int i = 66;
System.out.println(++i+i); //执行i=i+1 => i = 67 => 134
三、在Java中,以下赋值语句正确的是(CD)
A) int num1=(int)"18";//错误应该Integer.parselnt("18");B) int num2=18.0;M/错误double -> int
C) double num3=3d;M/ok
D) double num4=8;M/ok int -> doubleE) int i=48; char ch =i+1;1/错误int ->char
F) byte b = 19; short s = b+2;//错误int ->short
四、试写出将String转换成double类型的语句,以及将char类型转换成String的语句,举例说明即可,写简单代码
String str = "18.8"
标签:十六进制,转换,进制,关键字,二进制,int,八进制,十进制,运算 From: https://www.cnblogs.com/-andrea/p/16770617.html