年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4095|回复: 3

一个将十进制换算成二进制的函数

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2014-2-28 16:15:29 | 显示全部楼层 |阅读模式
    代码表示:
    1. #include <stdio.h>
    2. void putBinary();
    3. int main() {
    4.     putBinary(13);
    5.     return 0;
    6. }
    7. void putBinary(int n) {
    8.     int bits = sizeof(n) * 8;
    9.     while(bits-- > 0) {
    10.         printf("%d", n>>bits&1);
    11.         if (bits%4==0) printf(" ");
    12.     }
    13.    
    14.     printf("\n");
    15. }
    复制代码
    运行结果:
    1. 0000 0000 0000 0000 0000 0000 0000 1101
    复制代码


  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-3-2 13:46:31 | 显示全部楼层
    用for循环实现,并增加用户输入提示:
    1. /*
    2. 编写一个函数输出整数的二进制表示
    3. 1、64位编译器中由于整数在内存中所占的字节数为8,所以共计32位;
    4. 2、基本算法是通过末位与1进行位与运算得出二进制值,辅助右移运算将所有的位循环右移到末位,逐个输出;
    5. 3、通过与4取余运算,美化输出格式(0000 0000 0000 ...形式)
    6. 4、用单独一个函数实现功能
    7. */
    8. #include <stdio.h>
    9. void printBinary(int number) {
    10.    
    11.     for (int i = 31; i >= 0; i--) {  // 循环32次,为方便后面的计算,从[31-0]闭区间
    12.         
    13.         printf("%d", number >> i & 1);  // 利用循环条件中的值,从右移31位到右移0位,逐个输出
    14.         
    15.         if (i % 4 == 0) {  // 每输出4位后,加补一个空格 美化输出格式
    16.             printf(" ");
    17.         }
    18.         
    19.     }
    20.    
    21.     printf("\n");
    22. }
    23. int main() {
    24.     int n = 0;
    25.    
    26.     printf("请输入一个整数:");
    27.    
    28.     scanf("%d", &n);
    29.    
    30.     printf("该整数在内存中的二进制表示为:\n");
    31.    
    32.     printBinary(n);
    33.    
    34.     return 0;
    35. }
    复制代码
    示例结果:
    1. 请输入一个整数:255
    2. 该整数在内存中的二进制表示为:
    3. 0000 0000 0000 0000 0000 0000 1111 1111
    复制代码

  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-3-2 15:14:05 | 显示全部楼层
    本帖最后由 Sian 于 2014-3-2 15:16 编辑

    考虑到编译器位数长度不一致,可以将31替代成 ( sizeof(number) * 8 ) - 1 或者 ( sizeof(number)<<3 ) - 1
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-3-2 16:17:44 | 显示全部楼层
    负数同样能够打印出来,但负数的表现形式与正数有所区别,具体可参考
    “负数的二进制表示方法”
    http://www.yusian.com/forum.php? ... d=646&fromuid=3
    (出处: 小龙虾IT论坛)
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-4-29 19:45 , Processed in 0.050530 second(s), 23 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表