进制转换(二、八、十、十六)

进制转换:

为什么使用二进制、八进制、十六进制?

cpu只能识别高低两种电流,只能对二进制数据进行计算

二进制虽然可以直接被cpu识别计算,但是对于人来说是不方便书写、记录的,所以把二进制的数据先转换成八进制是为了方便记录到文档中

随着cpu的不断发展,cpu的位数不断增加,由早期的八位逐渐发展到现在的64位,因此八进制不再能满足需求,所以发展出了十六进制,由于历史原因,所以八进制还不能完全退出历史舞台

转换方式:

十进制转二进制(转其他所有进制都可用):
    求余法:用2对数据求余,记录余数,然后继续对商求余,直到商为0结束,,过程中产
    	   生的余数就是该数据的二进制(逆序)
    例:
    127 % 2     1
    63  % 2     1
    31  % 2     1
    15  % 2     1
    7   % 2     1
    3   % 2     1
    1   % 2     1
    0
    得:
    01111111

    求权法:从高位到地位,数据 - 2^(n-1),如果能减,第n位就是1,否则就是0
    例:
    137	-->	128 64 32 16 8 4 2 1
      		  1  0  0  0 1 0 0 1

手算:
    79 63 121 49

二进制转十进制:
    每位的2^(n-1)求和
    10011010  --> 128+16+8+2 = 154

二进制如何转八进制
    低位起,每三位二进制位对应一位八进制
    二进制:   001 001 101 110 010
                1   1   5   6   2

二进制如何转十六进制
    低位起,每四位二进制位对应一位十六进制
    二进制:    1 1011 0111 1010
    十六进制:  1    B    7    A

在C语言中:只要以0开头的数据都是八进制,以0x开头的数据都是十六进制数据
    %o 以八进制形式显示数据
    %x 以十六进制形式显示数据
    %#o %#x 以对应格式显示不同进制

练习:输入一个正整数以及m,然后显示该正整数的m进制是多少(m >= 2),超过10进制的如十六进制:10->A 11->B 12->C 13->D 14->E 15->F

	char arr[32] = {},yu; //yu用于储存余数
    int num = 0,n = 0,i = 0;
    printf("输入一个正整数和一个n:");
    scanf("%d %d",&num,&n);
    while(0 != num)
    {   
        yu = '0'+num%n;
        if('9' < yu) 
            yu = 'A'+yu-'9'-1;
        arr[i] = yu; 
        i++;
        num /= n;
    }   
    for(int k = i-1; k>=0; k--)
    {   
        printf("%c ",arr[k]);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值