Java学习笔记(五):进制

目录

进制介绍:

进制的转换:

第一组(转十进制)

二进制转十进制:

八进制转十进制:

十六进制转十进制:

第二组(十进制转)

十进制转二进制:

十进制转八进制:

十进制转十六进制:

第三组(二进制转)

二进制转八进制:

 二进制转十六进制:

 第四组(转二进制)

八进制转二进制:

 十六进制转二进制:

 原码、反码、补码(重点 难点)

位运算符:

位运算符注意事项:

位运算符练习题1:2&3=? ~-2=?  ~2=?   2|3=? 2^3=?

位运算符练习题2:int a=1>>2;int b=-1>>2;int c=1<<2;int d=-1<<2;int e=3>>>2;


进制介绍:

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

①二进制: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 不区分大小写。

十进制十六进制八进制二进制
0000
1111
22210
33311
444100
555101
666110
777111
88101000
99111001
10A121010
11B131011
12       C141100
13D151101
14E161110
15F171111
16102010000
17112110001

进制的转换:

第一组(转十进制)

二进制转十进制:

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和

案例:请将0b1011转成十进制的数

0b1011=1*2的(1-1)次方 + 1*2的(2-1)次方 + 0*2的(3-1)次方+ 1*2的(4-1)次方
            =1+2+0+8=11

八进制转十进制:

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和

案例:请将0234转成十进制的数

0234=4*8^0+3*8^1+2*8^2=4+24+128=156

十六进制转十进制:

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和

案例:请将0x23A转成十进制的数

0x23A=10*16^0+3*16^1+2*16^2=10+48+512=570

第二组(十进制转)

十进制转二进制:

规则:将该数不断除以 2,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。

案例:请将 46  转成二进制    = 0B00101110

一个字节有八位,101110才六位,不够八位,所以前面要加上两个0

十进制转八进制:

规则:将该数不断除以 8,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。 

案例:请将 131  转成二进制    = 0203

十进制转十六进制:

规则:将该数不断除以 16,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。 

案例:请将 237  转成二进制    = 0xED

第三组(二进制转)

二进制转八进制:

规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。 

案例:请将 ob11010101 转成八进制

ob11 (3) 010 (2) 101 (5)     => 0325

 二进制转十六进制:

规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。

案例:请将 ob11010101 转成十六进制

ob1101 (D) 0101 (5)  =    0xD5

 第四组(转二进制)

八进制转二进制:

规则:将八进制数每 1 位,转成对应的一个 3 位的二进制数即可。

案例:请将 0237  转成二进制

0 2(010) 3 (011) 7 (111) =    0b10011111

 十六进制转二进制:

规则:将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可。 

案例:请将 0x23B 转成二进制

0x2 (0010) 3 (0011) B (1011) =    0b001000111011

 原码、反码、补码(重点 难点)

★★★背下来
对于有符号的而言:
1.二进制的最高位是符号位:0表示正数,1表示负数

2.正数的原码,反码,补码都一样(三码合一)

3.负数的反码=它的原码符号位不变,其他位取反(0->1, 1->0)

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

5.0的反码,补码都是0

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

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

8.当我们看运算结果的时候,要看他的原码(重点)

位运算符:

java 中有 7 个位运算(&、|、^、~、>>、<<和 >>>)

分别是按位与&、按位或|、按位异或^、按位取反~,它们的运算规则是:

按位与&:两位全为1,结果为1,否则为0

按位或|:两位有一个为1,结果为1,否则为0

按位异或^:两位一个为0,一个为1,结果为1,否则为0

按位取反~:0->1,1->0

位运算符注意事项:

(1)算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
(2)算术左移 <<:  符号位不变,低位补 0
(3)>>>  逻辑右移也叫无符号右移,运算规则是:  低位溢出,高位补 0
(4)特别说明:没有 <<< 符号

位运算符练习题1:2&3=? ~-2=?  ~2=?   2|3=? 2^3=?

 

System.out.println(2&3);//2
        //第一题推导过程:
		//1.先得到2的原码:00000000 00000000 00000000 00000010
		//	然后求2的补码:00000000 00000000 00000000 00000010
		//2.先得到3的原码:00000000 00000000 00000000 00000011
		//	然后求3的补码:00000000 00000000 00000000 00000011
		//3.2按位与&3
		//00000000 00000000 00000000 00000010
		//00000000 00000000 00000000 00000011
		//&运算后的结果:00000000 00000000 00000000 00000010
		//答案为2
System.out.println(~-2);//1
        //第二题推导过程:
		//1.先得到-2的原码:10000000 00000000 00000000 00000010
		//	然后求-2的反码:11111111 11111111 11111111 11111101
		//	紧接着-2的补码:11111111 11111111 11111111 11111110
		//2.按位取反-2	   00000000 00000000 00000000 00000001
		//答案为1
System.out.println(~2);//-3
        //第三题推导过程:
		//1.先得到2的原码:00000000 00000000 00000000 00000010
		//	然后求2的补码:00000000 00000000 00000000 00000010
		//2.按位取反2:	  11111111 11111111 11111111 11111101
		//3.反码:		  11111111 11111111 11111111 11111100
		//4.原码:		  10000000 00000000 00000000 00000011
		//答案为-3
System.out.println(2|3);//3
        //第四题推导过程:
		//1.得到2的补码:00000000 00000000 00000000 00000010
		//2.得到3的补码:00000000 00000000 00000000 00000011
		//按位或运算:   00000000 00000000 00000000 00000011
		//答案为3
System.out.println(2^3);//1
        //第五题推导过程:
		//1.得到2的补码:00000000 00000000 00000000 00000010
		//2.得到3的补码:00000000 00000000 00000000 00000011
		//按位异或运算: 00000000 00000000 00000000 00000001
		//答案为1

 

位运算符练习题2:int a=1>>2;int b=-1>>2;int c=1<<2;int d=-1<<2;int e=3>>>2;

int a=1>>2; // 1 向右位移 2 位       1/2/2=0
int b=-1>>2;//算术右移 
int c=1<<2;//算术左移       1*2*2=4
int d=-1<<2;//			   -1*2*2=-4	
int e=3>>>2;//无符号右移      00000011   ->00 000000
//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
//-1原码:10000000 00000000 00000000 00000001
//-1反码:11111111 11111111 11111111 11111110
//-1补码:11111111 11111111 11111111 11111111

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

她与剑意皆失

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

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

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

打赏作者

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

抵扣说明:

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

余额充值