美文网首页
C语言之进制之间的转换

C语言之进制之间的转换

作者: WangXiaoNao123 | 来源:发表于2018-08-03 00:12 被阅读0次

    本人学生一枚,本文适合准备入门计算机的小白阅读,若发现文章中的错误,请大佬们及时发表评论。


    进制之间的转换

    计算机中一般是二进制、八进制、十进制和十六进制之间的相互转换,主要是围绕二进制进行转换,也就是说二进制是核心。

    image

    介绍

    • 二进制:只有01组成。
    • 十进制:平常的自然数。在C语言中,8进制01111这样的(凡是以0开头的数字序列)。
    • 八进制:由0~7组成。
    • 十六进制:由0~9A~F组成。在C语言中,16进制0x234这样的(如24就是0x018,凡是以0X或0x开头的数字序列)。

    二进制与十进制之间的转换

    • 十进制转二进制

        方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止
      
    image
    • 二进制转十进制

        方法为:把二进制数按权展开、相加即得十进制数
      
    image

    二进制与八进制之间的转换

    • 二进制转八进制

        方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。
      
    image
    • 八进制转成二进制

        方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。
      

    [图片上传失败...(image-9e6904-1533226303616)]

    二进制与十六进制之间的转换

    • 二进制转十六进制

        方法为:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。
      
    image
    • 十六进制转二进制

        方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。
      
    image

    十进制与八进制与十六进制之间的转换

    • 十进制转八进制或者十六进制有两种方法

    第一:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。这里不再做图片用法解释。

    第二:直接法—把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。

    image
    • 八进制或者十六进制转成十进制

    方法为:把八进制、十六进制数按权展开、相加即得十进制数。

    image

    十六进制与八进制之间的转换

    • 八进制与十六进制之间的转换有两种方法

    第一种:他们之间的转换可以先转成二进制然后再相互转换。

    第二种:他们之间的转换可以先转成十进制然后再相互转换。

    C语言中的原码、反码和补码

    数据在内存中存储的时候都是以二进制的形式存储的.int num = 10; 原码、反码、补码都是二进制.只不过是二进制的不同的表现形式.数据是以补码的二进制存储的.

    1个int类型的变量.在32位编译器内存中占据4个字节(这里不单独讨论int类型的具体的字节数,若不明白看下面的拓展资料)

    00000000 00000000 00000000 00000000

    如果最高为是0 那么表示这个数是1个正数
    如果最高为是1 那么表示这个数是1个负数

    原码

    最高位表示符号位. 剩下的位数.是这个数的绝对值的二进制.

    10的原码.
    
    00000000 00000000 00000000 00001010
    
    -8的原码.
    
    10000000 00000000 00000000 00001000
    

    绝对值: 正数的绝对值是自己,负数的绝对值去掉负号.

    反码

    正数的反码就是其原码.负数的反码就是在其原码的基础之上 符号位不变,其他位取反.

    10的反码:
    
    10的原码:00000000 00000000 00000000 00001010
    
    10的反码:00000000 00000000 00000000 00001010
    
    -8
    
    -8的原码:10000000 00000000 00000000 00001000
    
    -8的反码:11111111 11111111 11111111 11110111
    

    补码

    正数的补码就是其原码.负数的补码就是在其反码的基础之上+1

    10.
    
    10的原码:00000000 00000000 00000000 00001010
    
    10的反码:00000000 00000000 00000000 00001010
    
    10的补码:00000000 00000000 00000000 00001010
    
    
    
    -8
    
    -8的原码:10000000 00000000 00000000 00001000
    
    -8的反码:11111111 11111111 11111111 11110111
    
    -8的补码:11111111 11111111 11111111 11111000
    

    任何数据都是以其二进制的补码形式存储在内存中的

    拓展资料

    • 16位编译器


      image
    • 32位编译器


      image
    • 64位编译器


      image
    • 为什么数据要以补码的形式存储呢?

    计算机中只有加法没有减法.为了更加低成本的计算出结果,所以使用补码来存储数据.

    3 - 2; 这个减法运算对于计算机而言它的理解是 3 + (-2);

    使用原码计算.
    
    3的原码    00000000 00000000 00000000 00000011
    
    -2的原码   10000000 00000000 00000000 00000010
    
                ----------------------------------------------------
    
                   10000000 00000000 00000000 00000101 结果是1个负数明显是不对的
    
    
    
    
    
    使用反码计算.
    
    3 的反码:  00000000 00000000 00000000 00000011
    
    -2的反码:  11111111 11111111 11111111 11111101
    
                   --------------------------------------------------
    
                   00000000 00000000 00000000 00000000        0
    
    
    
    使用补码计算
    
    3 的补码:   00000000 00000000 00000000 00000011
    
    -2的补码:   11111111 11111111 11111111 11111110
    
                   -------------------------------------------------
    
                    00000000 00000000 00000000  00000001       1
    
    
    注:使用补码来做运算效率是最高的.

    相关文章

      网友评论

          本文标题:C语言之进制之间的转换

          本文链接:https://www.haomeiwen.com/subject/dupevftx.html