二进制介绍

二进制介绍_第1张图片十进制转相应进制

 

      (十进制)231 转 八进制 除八取余法 从下而上取余

       231/8=28 ....7

 

          28/8=3.......4

 

       3/8=0........3

 

       (十进制)231=(八进制)0o347

 

      (十进制)231 转 16进制 除十六取余法 从下而上取余

       231/16=14......7

 

       14/16=0..........14

 

       (十进制) 231=(十六进制)0xe7

 

      (十进制)231.3 转 16进制 (*)小数部分 乘十六取整法 从上而下取整

       0.3*16=0.48............0

 

       0.48*16=7.68..........7

 

       0.68*16=10.88........10

 

       0.88*16=14.08........14

 

       0.08*16=1.28..........1

 

       0.28*16=4.48 .........4

 

       (十进制)231.3=(十六进制)0xe7.07ae14    

 

  相应进制转十进制

      (八进制)0o27.43转 十进制

        7*8^0+2*8^1=(八进制)23

 

        4*8^-1+3*8^-2=35/64=0.546875

 

        0o27.43=(十进制)23.546875

 

       

 

      (十六进制)0o27.43转 十进制(同上)

        。。。。。。。。

 

  进制换算补充

      在进行十转二,八,十六进制小数点换算时,不管怎么乘二,八或十六,结果小数部分始终不为零时,分别有一舍二入,三舍四入,七舍八入对应操作

 

      八进制直接转十六进制或者十六转八,只有通过二进制,或十进制中间过渡,没有捷径,如果哪位大神有直接转换的方法欢迎告知

 

 二进制的原码,反码,补码

       正数的原码,反码,补码

            24=(二进制)00....00011000

 

            原码:00....00011000

 

            反码:00....00011000

 

            补码:00....00011000

 

       负数的原码,反码,补码

            -24=(二进制)1000....00011000

 

            原码:1000.....00011000

 

            反码:11111....11100111

 

            补码:1000.....11101000 (反码加一)

 

  二进制的运算  

        计算机对数字的加减运算都是用补码

            -23(原码):1000.....00010111

 

            -23(反码):1111......11101000

 

              -23(补码):1111......11101001

 

             12(原码):0000.....00001100

 

             12(反码):0000.....00001100

 

              12(补码):0000.....00001100

 

             

 

             12(补码)0000.....00001100(补码相加时,高位也就是符号位也要运算进来)

 

             -23(补码)1111......11101001

 

            ` -23(补码)+12(补码)=1111......11110101(结果如果是负数,也就是高位是1,取反加一)

 

             (结果取反加一)1000......00001011= -23+12=-11

 

        &(与),^(异或),|(或) ,~(按位取反) (*) 

             &(与)(1&1=1,1&0=0,0&0=0)

 

             101010001

 

             1101 00111

 

             =100000001

 

             ^(异或)(1^1=0,0^0=0,0^1=1)

 

             101010001

 

             1101 00111

 

             =01111 0110 

 

             |(或)(1|0=1,1|1=1,0|0=0)

 

             101010001

 

             1101 00111

 

             =11111 0110  

 

             ~(按位取反)对补码进行取反,取反结果为负,进行反码加一

 

            -12

 

            原码:100........1100

 

            反码:111.........0011

 

            补码:111.........0100

 

            取反:000.........1011=11

 

            12    

 

            原码:000........1100

 

            反码:000........1100

 

            补码:000........1100

 

            取反:111.........0011 结果负数,反码加一

 

             100........1101=-13

 

            1        

 

            原码:000........0001

 

            反码:000.........0001

 

            补码:000.........0001

 

            取反:111.........1110

 

               100..........0010=-2

 

            -1        

 

            原码:100........0001

 

            反码:111.........1110

 

            补码:111.........1111

 

            取反:000.........0000=0

 

        位移算数左移<<,算数右移>>,逻辑右移>>>(全都是补码进行的位移)

            5>>2=1

 

            (补码)00..0101>>2=00..0001

 

            -5>>2=-2

 

            10..0101

 

             (补码)11..1010+1=11..1011

 

            11..1011>>2=1111..1110(为负数,要反码+1)

 

            1000..0001+1=1000..0010=-2

 

            5>>>2=1(和算数位移结果一样)

 

            (补码)00..0101>>2=00..0001       

 

            -5>>>2=1073741822

 

            10..0101

 

            (补码)11..1010+1=11..1011

 

            11..1011>>>2=0011..1110(逻辑右移,高位始终补零,所以不用反码补一,结果就是一个很大的整数)

你可能感兴趣的:(java)