首页 > 其他分享 >位运算及进制转换

位运算及进制转换

时间:2022-10-08 23:11:29浏览次数:52  
标签:十六进制 转换 进制 关键字 二进制 int 八进制 十进制 运算

位运算及进制转换

目录

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. 特别说明:没有 <<< 符号

1.12.4 应用案例 BitOperator01.java

  1. int a=1>>2; //1 => 00000001 => 00000000 本质 1 / 2 / 2 =0

  2. 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

相关文章

  • 网络字节序与主机字节序的转换函数实践
    首先介绍什么是网络字节序和主机字节序网络字节序网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机......
  • 网络字节序与主机字节序的转换函数实践
    首先需要了解知识:1.字节序(1)小端字节序,数值低位存储在内存的低地址,高位存储在内存的高地址。(2)大端字节序,数值高位存储在内存的低地址,低位存储在内存的高地址。主机字......
  • 实现进制转化伪代码
    伪代码Write"Enterthenewbase"ReadnewBaseWrite"Enterthenumbertobeconverted"ReaddecimalNumberSetquotientto1WHILE(quotientisnotzero) Set......
  • 网络字节序与主机字节序的转换函数实践
    网络字节序与主机字节序的转换函数实践 1.网络字节序与主机字节序在Linux网络编程中,经常碰到网络字节序与主机字节序的相互转换。说到网络字节序与主机字节序需要清晰......
  • 网络字节与主机字节序的转换函数实践
     1.为什么要进行转换?1.1在进行网络编程时,由于网络字节的顺序和主机的字节顺序可能存在不同,需要进行转换以统一“格式”2.什么是网络字节顺序和主机字节顺序呢?2.1网络......
  • 网络字节序与主机字节序的转换函数实践
    什么是字节序?字节序,顾名思义,就是字节组织的顺序。我们可以将其根据其存储时从低位开始还是从高位开始分为两种,具体如下:类型简写本质大端BE(bigendian)将高序......
  • Python str unicode转换
    #!coding=utf8t="你好"printtype(t)printtt2=unicode(t,"utf8")printtype(t2)print......
  • 网络字节序与主机字节序的转换函数实践
    1.什么是字节序?字节序是处理器架构特性,用于指示像整数这样的大数据类型内部的字节如何排序。简单来说,就是指超过一个字节的数据类型在内存中的存储的顺序。那么很明显,像......
  • 类型转换
    类型转换由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换低------------------------------------------------------------------->高byte,short,char-......
  • 平面图最小割转换为对偶图最短路问题
    1、P4001[ICPC-Beijing2006]狼抓兔子 P4001[ICPC-Beijing2006]狼抓兔子-洛谷|计算机科学教育新生态(luogu.com.cn)直接上图,  注意dijkstra!!!  判重......