• 高效率的10进制转2进制(C版)


    先看例子《扫地机器人》:

     题目中涉及到了二进制中对某一位的三个操作,分别是:清零,置一,取反

    ①清零

    如何让二进制中的某一位的值变为0而其他位保持不变呢?

    这要涉及到了 按位与运算(都为1才为1) ,只要让这个二进制中的某一位的值对应的位数做和0的按位与运算,而其他的做1的按位与运算即可,以上题为例子:

     

     ②置一

    如何让二进制中的某一位的值变为1而其他位保持不变呢?

    这要涉及到了 按位或运算(有1即为1) ,只要让这个二进制中的某一位的值对应的位数做和1的按位或运算,而其他的做0的按位或运算即可,以上题为例子:

     

      ②取反

    如何让二进制中的某一位的值取反而其他位保持不变呢?

    这要涉及到了 按位异或运算(相同为0,不同为1) ,只要让这个二进制中的某一位的值对应的位数做和1的按位异或运算,而其他的做0的按位异或运算即可,(0 ^ 1 = 1 ,1 ^ 1 = 0 ,0 ^ 0 = 0 ,1 ^ 0 = 1 ,所以和1异或是取反,和0异或是不变)以上题为例子:

     

     然后就是如何以二进制的形式输出了

    我们在C语言中想要以10进制、8进制和16进制输出很简单只需要在输出时用%d、%o,%x即可。

    但是想要二进制输出就需要编写一个步骤了,快点抛弃你的取余符号,想想如何用位运算进行呢?

    x & 01 相当于只保留了最低位,因为只有最低位是按位与运算保留,其他位都是清零。
    而 ( x >> 1 ) & 01 相当于只保留了比最低位高一级的次级位数,以此类推,( x >> n ) & 01 相当于只保留了比最低位高n位的次级位数。
    然后通过循环从最高位到最低位依次输出即可

     实现代码如下:

    1. #include<stdio.h>
    2. #include<math.h>
    3. int main()
    4. {
    5. int x;
    6. x = 111; // 二进制为 01101111
    7. /*分别输出十进制,八进制,十六进制的值*/
    8. printf("%d %o %x\n", x, x, x);
    9. /*
    10. 十进制的数字以二进制的形式输出到控制台中
    11. x & 01 相当于只保留了最低位
    12. 而 ( x >> 1 ) & 01 相当于只保留了比最低位高一级的次级位数
    13. 然后从最高位到最低位依次输出即可
    14. */
    15. int temp = 0,n;
    16. while (x >= pow(2,temp)) // 得到十进制数转换为2进制需要循环几次
    17. {
    18. temp++;
    19. }
    20. printf("%d\n",temp);
    21. for (int i = temp; i >= 0; i--)
    22. {
    23. n = (x >> i) & 1; //从高位依次取出
    24. printf("%d",n);
    25. }
    26. return 0;
    27. }

  • 相关阅读:
    portswigger lab:SQLI 盲注:利用conditional error
    OpenGL之变换
    掌握Python爬虫实现网站关键词扩展提升曝光率
    前端面试题小结
    李飞飞:云原生数据库是大势所趋
    基于Python实现电商订单的数据分析
    中远通在创业板IPO过会:前三季度收入11亿元,罗厚斌为董事长
    线性代数本质系列(二)矩阵乘法与复合线性变换,行列式,三维空间线性变换
    java 实现访问者模式
    Axios 面试题
  • 原文地址:https://blog.csdn.net/qq_31671169/article/details/125531508