C语言中进制转换

计算机识别数字串需要一个标志来判断是哪种进制的数字
编译器默认数值是十进制(只有十进制存在正负号)

标识:二进制0b(1010) 八进制0(1244)十六进制0x(2a4a) 

十进制:

权重:10  每位数乘以进制数的次方
          逢十进一     表示范围:0~9
        1234 = 4*10^0 + 3*10^1 + 2*10^2 + 1*10^3

二进制:

              权重:2
              逢二进一     表示范围: 0,1
        在1字节中:0000 1011 = 1*2^0+1*2^1+0*2^2+1*2^3 = 11
        第一位表示符号位:正负号 0为正 1为负
        一个字节能表示的范围:127 ~ -128
        正数计算 倒着按顺序加
        eg.0011 1010 = 2+8+16+32 = 58
注:负数的表示与整数不相同(下面会讲到如何表示负数)

十进制与二进制的转换:

1.分解法 适用于较小数字,能直接用2^10以内的数字加出的
eg. 11 = 8(2^3)+ 2(2^1)+ 1(2^0)    11 => 0000 1011
       3 = 2(2^1)+ 1(2^0)                         3 => 0000 0011
       1 = 1(2^0)                                           1 => 0000 0001

2.倒除法(辗转相除法)适合任何数据
eg. 2/200 余0
      2/100 余0
      2/50   余0
      2/25   余1
      2/12   余0
      2/6     余0
      2/3     余1
      2/1     余1
      0

除完后将余数从下向上写出 即为二进制表示该数


    200 = 1100 1000 X(200>127 故要用两个字节表示 为 0000 0000 1100 1000)

负数:
     按位取反(取反的结果叫反码)再加一(+1后的结果叫补码)

计算机中进行计算的都是用补码进行计算  正数的补码= 原码,所以不用进行转换

eg.

123 =   0111 1011

反码     1000 0100

补码     1000 0101(-123)

补码转换到原码依旧按位取反再加1

-123 = 1000 0101

取反    0111 1010

加一    0111 1011(123)



八进制:

              权重:8      取值范围:0~7
               逢八进一
        二进制推八进制:二进制数字串从后往前三位一划分 位数不够在前面补0
        每位1对应4  2  1  每位数字和为该位的八进制表示
        01 010 100 101 001
       001 010 100 101 001
         1     2      4    5     1


        八进制推二进制:一个位对应二进制三个位


        //int a = 01278;

 不是个合理数字 编译器默认是十进制 0开头为八进制数字标识 八进制中不能出现数字8
        八进制推十进制:倒着当前为数字乘八的次方叠加
        01234 = 4*8^0 + 3*8^1 + 2*8^2 + 1*8^3 


        十进制推八进制:辗转相除法直接除八 余数倒向上写

100的八进制表示为:100->0144

       100/8  余4

       12/8    余4

        1/8     余1

         0 


十六进制:

         权重:16     取值范围:0~9 A-10 B-11 C-12 D-13 E-14 F-15   逢16进1
          二进制推十六进制:二进制数字串中四位一划分 
          每位对应 8  4  2  1

eg.     010  1010  0111 1111  1001    -> 0x2a7f9

         0010  1010  0111 1111  1001

           2      a(10)    7    f(15)      9
          十六进制推二进制:一个位对应四个位
          十六进制推十进制:倒着当前数字乘16的次方
          十进制推十六进制:辗转相除法直接除16 余数倒向上写

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值