• 高效率的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. }

  • 相关阅读:
    【毕业设计】基于stm32的智能温控风扇设计与实现 - 物联网 单片机
    将 ONLYOFFICE 文档编辑器与 С# 群件平台集成
    Spring Cloud Stream详解
    【Linux】基础:Linux环境基础开发工具——make与Makefile
    Ubuntu中安装使用QEMU/KVM/virt-manager运行虚拟机
    图扑软件用数据可视化形式告诉你,楼宇建设如何数字化转型
    vue中请求接口
    2.算法-Python模拟退火算法实例
    Embedding 模型部署及效果评测
    树莓派SSH链接出错 Host key verification failed. 解决办法
  • 原文地址:https://blog.csdn.net/qq_31671169/article/details/125531508