C语言学习随笔-01 关于二进制

1、二进制数据是用0和1两个数码来表示的数,它们的基数为2,进位规则是逢二进一,借位规则是借一当二。

2、当今的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的,计算机中的二进制则是一个非常微小的开关。

3、进制转换

      ▶  二进制(B)、八进制(O)、十进制(D)、十六进制(H)

       ●  3.1  二进制(B)转八进制(0)

           方法1:三位数为一组,不够前面补0,按权展开法计算。

           例:10110(B)= 26(O)

           (0*22+1*21+0*20)+(1*22+1*21+0*20)=26(O)

           方法2:(421法):将每组的数分别对应421,0对应的数不要,1对应的数相加,把每组数的和连起来即可得到八进制数。

            0  1  0  1  1  0    = 26(O)

            4  2  1  4  2  1        

        ●  3.2  二进制(B)转十进制(D)

            方法1:(按权展开式):把二进制每位数乘上2的位权,数字位权从0开始,从右往左,依次加1,把结果相加即可得到十进制数。

            例:10110(B)= 22(D)

            1*24+0*23+1*22+1*21+0*20 = 16+0+4+2+0 = 22(D)

            方法2:二进制数从右往左依次对应1、2、4、8、16、32...,0对应的数不要,1对应的数相加。

            例:10110(B) = 22(D)

            1    0    1   1   0

            16  8    4   2   1

        ●  3.3  二进制(B)转十六进制(H)

            方法:(8421法):每四个数为一组,不够四位在前面补0,每组数按权展开,分别对应8421,0对应的不要,1对应的相加,把每组数的和连起来即可得到十六进制数。

            例:101101(B) = 2D(H)

            0 0 1 0  1 1 0 1  = 2D(H) D = 13

            8 4 2 1  8 4 2 1

        ●  3.4  十进制(D)转二进制(B)

            方法:(短除法):除二取余,倒序排列。

            例:26(D) = 11010(B)

            2   26  0

            2   13  1

            2     6  0

            2     3  1

                   1  1

        ●  3.5  八进制(O)转二进制(B)

            方法:(421法):把八进制数每位拆开分别对应421,能对应上的写1,对应不上的写0,不够三位前面补0。

            例:26(O) = 10110(B)

            4 2 1  4 2 1    = 10110(B)

            0 1 0  1 1 0

        ●  3.6  十六进制(H)转二进制(B

            方法1:(短除法):把十六进制每一位数分别除2取余,然后倒序排列,余数需凑后四位二进制数,不够的在前面补0.

            例:5C2(H) = 010111000010(B)

            2   5  1                          2   12  0                   2    2   0

            2   2  0                          2    6   0                         1   1

 

            2   1  1                          2    3   1

                                                       1   1

           方法2:(8421法):把每位数拆开分别对应8421,需要的值为1,不需要的值为0。

           例:5C2(H) = 010111000010(B)

           5拆分成为4和1,C拆分成为8和4,2不拆分

           8 4 2 1   8 4 2 1  8 4 2 1

           0 1 0 1   1 1 0 0  0 0 1 0

       ●  3.6  十进制(D)转八进制(O)

           方法:除8取余,倒序排列。

           例:59(D)= 73(O)

           8   59   3

                 7    7

       ●  3.7  八进制(O)转十进制(D)

           方法:(按权展开法):每位八进制数分别乘以8的位权次幂,把和相加即可得到十进制数。

           例:123(O) = 83(D)

           1*82+2*81+3*80 = 64+16+3 = 83(D)

       ●  3.8 十进制(D)转十六进制(H)

           方法:除16取余,倒序排列.

           例:43(D) = 2B(H)  B=11

            16   43    11

                    2      2

       ●  3.9 十六进制(H)转十进制(D)

           方法:(按权展开式):十六进制每位数分别乘以16的位权次幂。

           例:2B(H) = 43(D)

           2*161+11*16= 32 + 11 = 43(D)

4、小数部分的进制转换

       ●  4.1 二进制小数转十进制小数

           方法1:整数部分使用按权展开法,小数部分按权展开法从左往右依次为-1、-2、-3...

           例:11.101(B) = 3.625(D)

           1*21+1*2= 2 + 1 = 3   +   1*2-1+0*2-2+1*2-3= 0.5+0+0.125=0.625 = 3.625(D)

           方法2:可以用小数部分从左往右依次除以2/4/6/8/16...

           1/2+1/8 = 0.5+0.125 = 0.625

       ●  4.2 二进制小数转八进制小数

           方法:(421法):整数部分每三位一组,不够前面补0,从右到左,分别对应421,0对应的不要,1对应的相加;小数部分三位一组,不够后面补0,从左往右。

           例:11.101(B) = 3.5(O)

           0 1 1  .  1 0 1    = 3.5(O)

           4 2 1  .  4 2 1

       ●  4.3 二进制小数转十六进制小数

           方法:(8421法):二进制数每四位一组,整数前面补0,小数后面补0,依次对应8421,0对应的不要,1对应的相加。

           例:11.101(B) = 3.A(H)

           0 0 1 1  .  1 0 1 0   = 3.A(H) A=10

           8 4 2 1  .  8 4 2 1

       ●  4.4 十进制小数转二进制小数

           方法:整数部分:除2取余,倒序排列;小数部分:乘2取整,正向排列。

           例:3.625(D) = 11.101(B)

           2  3  1   .    0.625

               1  1      x       2      = 11+0.101  = 11.101(B)

                             1.250

                           x       2

                                 0.5

                           x       2

                                   1

5、二进制原码、反码以及补码的转换方式

     因为计算机的计算器中只有加法器,所以需要将减法转换为加法来计算。

     ●  原码:是一个数的二进制表现形式,二进制首位为标志位(标志位为0表示为正数,标志位为1表示为负数)。

         例:14(D) = 00001110(B)

               -21(D) = 10010101(B)

     ●  反码:正数的原码、反码和补码都相同,为原码本身,所以14(D)的反码和补码都是 00001110。

                   负数原码转反码:标志位不变,其他取反;补码则在反码的基础上加1。

         例:如-21(D):10010101->反码为:11101010->补码为:11101010+1 = 11101011。

     计算机内的计算方式:补码+补码返回结果的原码,然后输出原码的十进制数。

         例:14+(-21) = -7

          14的补码为:00001110

         -21的补码为:11101011

               00001110

           +  11101011

               11111001  (-7的补码)

           -                1

               11111000  (-7的反码)

               10000111  (-7的原码)

                    -7          (输出十进制结果)

          例:14-(-21) = 35

                00001110

            +  00010101

                00100011

                            35

6、知识点补充:

     ▶ 8位二进制数能表示的十进制数的范围为-128到+127。

     ▶  如果数小于-128或大于127,则会溢出,溢出只能用两个字节,用16位的二进制数表示。

     ▶  0的补码为00000000,-128的补码为10000000。

     ▶  计算机中有符号的数用补码表示。

     ▶  原码首位为标志位,1表示负数,0表示正数。
     ▶  反码=原码的标志位不变,其他取反。

     ▶  补码=反码+1。
     ▶  正整数的原码、反码可补码相同,为原码本身。

posted @ 2024-01-05 10:36  啊波波老表  阅读(232)  评论(0)    收藏  举报