zoukankan      html  css  js  c++  java
  • 十进制转二进制

      将十进制转换为二进制,基本思路是这样的:首先判断这个数是奇数还是偶数,如果是奇数,那么二进制数的最后一位为1,否则为0。这个采用模2运算即可。然后来分析其他位,确定二进制倒数第二位,也可以采用模2运算,但是需要将二进制的最后一位舍弃,也就是向右移一位。举个简单的例子,9的二进制表示为1001,那么对9模2运算,也就是9%2=1,那么最后一位为1,这个时候将9向右移一位9>>1,也就是做除(/)运算,结果为4,再模2,4%2=0。得出倒数第二位。一直到这个十进制数小于2,结束所有操作。这是基本思路,下面直接上代码:

     1 #include<stdio.h>
     2 
     3 void to_binary(unsigned long n);//函数声明
     4 
     5 int main(int argc, char* argv[])
     6 {
     7     int n ;
     8     printf("Enter a number , I will change it to binary: (Q Quick)
    ");    
     9     
    10     while (scanf("%d",&n)==1)
    11     {
    12         to_binary(n);//调用函数,将十进制数传入
    13         printf("
    Enter a number , I will change it to binary: (Q Quick)
    ");    
    14     }
    15     return 0;
    16 }
    17 
    18 void to_binary(unsigned long n){
    19     int r;
    20     
    21     r = n % 2;//对n模2,求出二进制最后一位
    22 
    23     if (n >= 2)
    24         to_binary(n>>1);//递归调用
    25 
    26     putchar('0' + r);//打印二进制数
    27     return 0;
    28 }

      这里有三点要注意:

      1.对于求出二进制的每一位我们可以使用循环来求出,但是在上面的程序中,我们使用了递归调用。递归在层数不多的情况下是具有较高的运算速度,但是由于递归调用会增大系统额外的开销,消耗系统资源,所以在层数较多的情况下并不适用。但是一般面试时,面试官会考察递归,所以在平时的编程中应该尽量熟悉。

      2.我们在打印二进制数的时候,并没有对每一位是0还是1做判断。而是借助一个int变量r和字符'0',如果r为0,那么字符'0'+0,还是'0';如果r为1,那么字符'0'+1会打印出字符'1'。因为'1'的ASCALL码比'0'的ASCALL码大1。所以不需要做判断。

      3.程序说输入q结束程序,其实不仅仅是q,只要输入的是非数字值,都会退出循环。

  • 相关阅读:
    递归和回溯_leetcode-floodfill
    递归和回溯_leetcode131
    递归和回溯_leetcode130
    递归和回溯_leetcode93-经典的回溯题
    递归和回溯_leetcode90
    递归和回溯_leetcode79
    递归和回溯_leetcode78-经典的子集
    知识树杂谈(1)
    Android 设备兼容性(1)
    微信小程序- 生成二维码
  • 原文地址:https://www.cnblogs.com/zhouxuanyu/p/4506589.html
Copyright © 2011-2022 走看看