C语言进制之间转换

4 篇文章 0 订阅
2 篇文章 0 订阅

C语言提供了三种数值输入类型:8进制 “0” 开头、10进制直接输入数字、16进制 “0X" 开头。为了输出这三种数字格式stdio.h中的printf(标准输出格式)中定义了三种输出方式:8进制 “%o"、10进制 “%d“、16进制“%x"。所以这三种数字格式转换就很方便了看个例子:

  1 #include <stdio.h>
  2
  3 int main(){
  4     int num1 = 11;                      //10进制输入11
  5     int num2 = 013;                    //8进制输入11
  6     int num3 = 0xb;                    //16进制输入11
  7
  8     printf("num1=%X\n",num1);           //16进制输出
  9     printf("num2=0%d\n",num2);          //10进制输出
 10    printf("num3=0x%o\n",num3);          //8进制输出
 11     if(num1 == num2)                            //判断不同输入方式数字是否相等
 12         printf("num1 = num2\n");
 13     if(num1 == num2 && num2 == num3)
 14         printf("11 == 013 == 0xb\n");
 15
 16 }

可以看到以不同的方式输入同一个数结果都是相等的。输出的时候指定输出格式就是了,和输入格式完全无关。

还有最后一个问题2进制问题。C语言没有直接提供2进制方式的输入和输出所以就要自己转换,这里给出一个10进制转变进制输出的方法。原文地址:https://blog.csdn.net/danxibaoxxx/article/details/81296131。这个也表明是转载的但没有写转载地址。

14 void print_bin(int n){                                                                   
15     int l = sizeof(n)*8;            //总位数                                                
16     int i;                                                                               
17     if( n == 0){                        //判断输入是否为0                                       
18         printf("0");                                                                     
19         return ;                                                                         
20     }                                                                                    
21                                                                                          
22     for( i = l -1 ; i >= 0; i--){           //跳过前面为0的位                                   
23         if(n&(1<<i)) break;             //这里有个与运算&和位运算<<  1<<i 就是把第1这个数字在内存中左移i位         
24     }                                                                                    
25     for(;i>=0;i--){                             //上一个循环找到了第一个不为0的位,输出从这里开始               
26         printf("%d",(n&(1<<i)) != 0);                                                    
27     }                                                                                    
28 }                                                                                        
  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值