Java·第二章·运算符·进制

本文详细介绍了二进制、十进制、八进制和十六进制的表示方法,并阐述了它们之间的转换规则,包括算数运算、原码、反码和补码的概念,以及位运算如按位与、或、异或和取反。还提供了编程示例和计算技巧,如处理小数运算和字符转换。
摘要由CSDN通过智能技术生成

进制

  • 介绍

    对于整数,有四种表示方法:

    1. 二进制:0,1,满2进1,以0b或0B开头。
    2. 十进制:0-9,满10进1.
    3. 八进制:0-7,满8进1,以数字0开头表示。
    4. 十六进制:0-9及A(10)-F(15),满16进1.以0x或0X开头表示。此处的A-F不区分大小写。
    • 举例

       		//n1 二进制
      		int n1 = 0b1010;
      		//n2 十进制
      		int n2 = 1010;
      		//n3 八进制
      		int n3 = 01010;
      		//n4 十六进制
      		int n4 = 0x10101;
      		System.out.println("n1=" + n1);//n1=10
      		System.out.println("n2=" + n2);//n2=1010
      		System.out.println("n3=" + n3);//n3=520
      		System.out.println("n4=" + n4);//n4=65793
      
  • 进制的图示

    十进制十六进制八进制二进制
    0000
    1111
    22210
    33311
    444100
    555101
    666110
    777111
    88101000
  • 进制的转换

  • 第一组

    • 十六进制 → 十进制
      1. 规则
        1. 从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和
      2. 案例
        1. 0x23A = 10 * 16^0 + 3 * 16^1 + 2 * 16^2 = 10 + 48 + 512 = 570
    • 八进制 → 十进制
      1. 规则
        1. 从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和
      2. 案例
        1. 0234 = 4 * 8^0 + 3 * 8^1 + 2 * 8^2 + 0 * 8^3 = 4 + 24 + 128 = 156
    • 二进制 → 十进制
      1. 规则
        1. 从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
      2. 案例
        1. 0b1011 = 1 * 2^0 + 1 * 2^(2-1) + 0 * 2^(3-1) + 1 * 2^(4-1) = 1 + 2 + 0 + 8 = 11
  • 第二组

    • 十进制 → 二进制
      1. 规则
        1. 将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
      2. 案例
        1. 34转成十进制:0B00100010
    • 十进制 → 八进制
      1. 规则
        1. 将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
      2. 案例
        1. 131转成十进制:0203
    • 十进制 → 十六进制
      1. 规则
        1. 将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
      2. 案例
        1. 237转成十进制:0xED
  • 第三组

    • 二进制 → 八进制
      1. 规则
        1. 从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
      2. 案例
        1. 0b11(3)010(2)101(5)转成八进制:0325
    • 二进制 → 十六进制
      1. 规则
        1. 从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
      2. 案例
        1. 0b1101(D)0101(5)转成八进制:0xD5
  • 第四组

    • 八进制 → 二进制
      1. 规则
        1. 将八进制数每1位,转成对应的一个3位的二进制数即可
      2. 案例
        1. 02(010)3(011)7(111) 转成二进制:0b010011111
    • 十六进制 → 二进制
      1. 规则
        1. 将八进制数每1位,转成对应的一个4位的二进制数即可
      2. 案例
        1. 0x2(0010)3(0011)B (1011)转成二进制:0b001000111011
  • 二进制在运算中的说明

    1. 二进制是逢2进位的进位制,0、1是基本算符。
    2. 现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。
    3. 二进制(Binary)数用0和1两个数字及其组合来表示任何书。进位规则是“逢2进1”,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。
    • 原码、反码、补码(重点/难点

      1. 二进制的最高位是符号位:0表示正数,1表示负数。

      2. 正数的原码、反码、补码都一样。(三码合一

      3. 负数的反码 = 它的原码符号位不变,其他位取反。

      4. 负数的补码 = 它的反码 + 1

        负数的反码 = 它的补码 -1

      5. 0的反码、补码都是0

      6. Java没有无符号数。换言之,Java中的数都是有符号的。

      7. 在计算机运算的时候,都是以补码的方式来运算的。

      8. 当我们看运算结果的时候,要看他的原码。

  • 位运算

    • 按位与&、按位或|、按位异或^、按位取反~

      按位与 &两位全为1,结果为1,否则为0
      按位或两位有一个为1,结果为1,否则为0
      按位异或 ^两位一个为0,一个为1,结果为1,否则为0
      按位取反 ~0 → 1,1 → 0
      • 案例
        	  //1.先得到2的补码:00000000 00000000 00000000 00000010
        		//2.3的补码:00000000 00000000 00000000 00000011
        		//3.按位与
        		//  00000000 00000000 00000000 00000010
        		//  运算后的源码也是 00000000 00000000 00000000 00000010
        		//  结果就是2
        		System.out.println(2 & 3);//2
        		//1.先得到-2的原码:10000000 00000000 00000000 00000010
        		//2.-2的反码:11111111 11111111 11111111 11111101
        		//3.-2的补码:11111111 11111111 11111111 11111110
        		//4.~ -2操作:00000000 00000000 00000000 00000001运算后的补码
        		//5.运算后的原码就是 00000000 00000000 00000000 00000001
        		System.out.println(~-2);//1
        		/*1.得到2的补码:00000000 00000000 00000000 00000010
        		2. ~2操作 11111111 11111111 11111111 11111101 运算后的补码
        		3.运算后的反码 11111111 11111111 11111111 11111100
        		4.运算后的原码 10000000 00000000 00000000 00000011*/
        		System.out.println(~2);//-3
        
    • 算数右移>>、算术左移<<、逻辑右移>>>

      算数右移>>低位溢出,符号位不变,并用符号位补溢出的高位
      算术左移<<符号位不变,低位补0
      逻辑右移>>>(无符号右移)低位溢出,高位补0
          //1 → 00000000 00000000 00000000 00000001
      		//00000000 00000000 0000000 00000000
      		//本质:1 / 2 / 2
      		int a = 1 >> 2;//1 向右移 2位
      		int b = -1 >> 2;//算数右移
      		//1 → 00000000 00000000 00000000 00000001
      		//    00000000 00000000 00000000 00000100
      		//本质:1 * 2 * 2
      		int c = 1 << 2;//算数左移
      		int d = -1 << 2;//负数需要转换成补码
      		int e = 3 >>> 2;//无符号右移
      		System.out.println("a=" + a);//a=0
      		System.out.println("b=" + b);//b=-1
      		System.out.println("c=" + c);//c=4
      		System.out.println("d=" + d);//d=-4
      		System.out.println("e=" + e);//e=0
      

  • 本章习题

//·a % b 当a是小数时,公式= a -(int)a / b * b
System.out.println(-10.5 % 3);//-1.5
//注意:有小数参与的运算,得到的结果是近似值
  	int i = 66;
	System.out.println(++i + i);//134
int num1 = (int)"18";//× 应该Integer.parseInt("18");
int num2 18.0;//× double → int
double num3 = 3d;//√
double num4 = 8;//√ int → double
int i = 48; char ch = i + 1;//× int → char
byte b = 19;short s = b + 2;//× int → short
//写出将String转换成double类型的语句,以及将char类型转换成String的语句
String str = "18.8";//注意:字符串要可以转成 double
double d1 = Double.parseDouble(str);

char c1 = '易';
String str2 = c1 + "";
  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Annabelle.02

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值