09、进制的转换 原码、反码、补码 二进制、八进制、十进制、十六进制的转换

进制的讲解

在计算机里面一个数值是以什么形式进行保存?使用二进制的补码进行保存(原码、补码、反码)

机器数

一个数在计算机中的表现形式叫做机器数,这个数有正负之分,在计算机中用一个数的最高位(符号位)用来表示它的正负,其中0表示正数,1表示负数。

原码【符号位+数值表达】

用第一位表示符号,其余位表示值。因为第一位是符号位,所以8位二进制数的取值范围就是:[1111_1111 , 0111_1111] 即 [-128 , 127] ,原码是容易被人脑所理解的表达方式

反码【正数一致,负数是原码除符号位都取反】

正数的反码是其本身负数的反码是符号位保持不变,其余位取反。例如正数1的原码是[0000_0001],它的反码是是其本身

[0000_0001],-1的原码是[1000_0001],其反码是[1111_1110]

补码【正数一致,负数是原码除符号位都取反+1】一般在计算机中负数是用补码的形式

正数的补码是其本身,负数的补码是在其反码的基础上+1,例如正数1的原码是[0000_0001],他的补码是其本身[0000_0001],

-1的补码是[1111_1111]

-- 二进制: 在java里面使用0b或者0B作为前缀表示这个数为二进制的数值 例如:0b01010011

最高位是符号位:正数为0 负数为1

二进制转换为十进制操作(规律:m*2^(n-1)),n表示当前的第几位,m是代表二进制的0和1,0就不计算,1就要计算 * 1

二进制转十进制:

规律:

0 0 0 0 0 0 0 1 = 1

0 0 0 0 0 0 1 0 = 2

0 0 0 0 0 1 0 0 = 4

0 0 0 0 1 0 0 0 = 8

。。。。。。。。。。。。。。

1 1 1 1 1 1 1 1

128 64 32 16 8 4 2 1

二进制转十进制:

1*2^(4-1)=2^3=2的3次方=8

1*2^(6-1)=2^5=2的5次方=32

比如:求出 0000 1001的十进制

解法1:根据 1 2 4 8 16 32 64 128快速看出二进制上的转十进制的数,然后再进行相加

0000 1001 = 0000 1000 + 0000 0001 = 9

= 8 + 1

解法2: 1*2^(4-1)+1*2^(1-1)=8+1=9

练习:

0 1 1 1 0 1 0 1 :

0 64 32 16 0 4 0 1

64+53(32+21(16+5(4+1)))

=64+32+16+4+1

=117

0 0 1 0 1 0 1 1

0 0 32 0 8 0 2 1

=1+2+8+32

=43

0 0 1 1 0 1 0 1

0 0 32 16 0 4 2 1

=32+16+4+1

=53

求-1的二进制,假设二进制的位数是8位

-1 = 0-1= 1  0000 0000 -

                   0000 0001

               =   1111 1111【补码】

-1 + 1 = 0 = 1111 1111

               + 0000 0001

             =1 0000 0000

-2 = -1-1 = 1111 1111

              - 0000 0001

                 1111 1110

-2 = -1+-1 = 1111 1111

                  +1111 1111

                    1111 1110

     

   

1111 1111(-1的补码)

1111 0111(-8的补码)

1111 0011(-13的补码)

--怎么得到负数的补码:(数值大的时候)

简单暴力的方法直接使用电脑中的计算器程序员模式进行计算

教程:如果你想要查询负数的补码 直接用0-去这个数的正数得出来即是负数的补码

程序员模式中不能使用负号+数的出负数的

更多的还是自己尝试吧,不细写了

计算器中有4个按钮分别代表了:

字节
Byte: 一个字节,8位,是计算机中数据处理的最基本的单位


Word: 两个字节,一个字, 16位

双字
Dword: 四个字节,两个字为一个双字 ,32位 D为double

四字
Qword: 两个双字为一个四字,四个字,64位 Q为quadra
 

(数值小的时候)更能简单得到的二进制的补码        

               

               -13 = -1-12

                     = -1 - 4 - 8       

这个是9的二进制0000 1001,求出-9的二进制

--1、求出-9的原码                       1000 1001(原码)

--2、求出其的反码【除符号位】 1111 0110(反位)

--3、反码加一得到补码                1111 0111(反码)

步骤:

-9 = -1-8 = 

                 1111 1111(-1的补码)

             - 0000 1000

                1111 0111(-9的补码)

              

-1-2-8=-11

0111 0101==?正数

64+32+16+4+1=117

//  195   int  -->  byte  ==  127
//  0000  1100  0011 //195
//  1100  0011  = -1-32-16-8-4 = -61  
byte res3 = (byte)(195);
System.out.println(res);//-61

byte 8位

最小:1000 0000==》-1-1-2-4-8-16-32-64=-128

最大:0111 1111==》+1+2+4+8+16+32+64=127

267 = 256+11(8+2+1)

。。。。 0000 0001 0000 1011【32位】

==》赋值给8位的byte 【低8位】

0000 1011【8位】==》11

多少位二进制能表示一位8进制?

刚好3位的2进制可以表示一个8进制的数值,从低位开始,每三位一组,不够则补0

-- 八进制:0~7 在java里面使用0作为前缀表示这个数为八进制的数值 例如:

-- 八进制转十进制:(规律:m*8^(n-1))

0776:

7*8^2+7*8^1+6*1==510

--二进制转换八进制

假设:能够使用多位的二进制表示一位的八进制【成立】

11 = 2+1=3

111 = 4+2+1=7 110=6 101=5

--可以使用3位的二进制表示一位的八进制 要是三位不够位数就补0即可

0001 0101

000 010 101 16 + 5 = 21(十进制)

0 2 5 = 025(八进制)==》转换为十进制 0+2*8^1+5*8^0 = 16+5 = 21

65【八进制】

000 110 101 【二进制】

十进制--》八进制:十进制--》二进制 --》八进制 【可以用计算器或者代码进行计算】

需要用多少位二进制能够表示一位的十六进制的数?

1111=15

使用4位的二进制表示一位的十六进制 高位不够就补0

-- 十六进制转为十进制:0~9 abcdef【10、11、12、13、14、15】(规律:m*16^(n-1))

\u4e2d==>16位2进制 --> 4e2d --> 0100 1100 0010 1101 -->20013

-- 在java里面使用0x或者0X示这个数为十六制的数值 例如:0X76ee

-- 二进制转为十六进制:

0111 0110 1110 1110 可以使用四位的二进制表示一位的十六进制

ox 7 6 e e --> 0x76ee

7*16^3+6*16^2+14*16^1+14*16^0 = 十进制的数值

-- 十六进制如何转换为八进制?

可以先从十六进制转换二进制,然后再通过二进制转换为八进制

※一定要掌握二进制如何转换为8、10、16进制,反之一样

0 1 1 1_1 0 1 1_0 1 1 0_1 1 1 0 转换为16进制

0 4 2 1_8 0 2 1_0 4 2 0_8 4 2 0

7_11_6_14

7 b 6 e

0x7b6e

01_101_110 转换为8进制

01_401_420

0156

0 1 1 1 0 1 1 0 转换为10进制

0 64 32 16 0 4 2 0

64+32+16+4+2=118

ox7fd2 ==>八进制 ==》二进制 ==》10进制

你可能感兴趣的:(01,什么是JAVA语言,大数据,java,开发语言,eclipse,ide)