A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 1wang2huan 于 2015-9-4 20:13 编辑
  1. #include <stdio.h>

  2. int main(int argc, const char * argv[]) {
  3.     //    定义变量存储用户输入的值
  4.     int a;
  5.     int binary[32];
  6.     printf("请输入一个整数:\n");
  7.     scanf("%d",&a);
  8.    
  9.     int len = sizeof(int)*8;
  10.     //    for循环让每一位和1进行与,取得每一位打印出来
  11.     if (a >= 0) {
  12.         //     如果输入的是正数
  13.         for (int i=0; i<=len-1; i++) {
  14.             if (i%8 == 0) {
  15.                 printf(" ");
  16.             }
  17.             printf("%d的二进制数为:",a);
  18.             printf("%d",(a>>(len-1-i)) & 1);
  19.             
  20.         }
  21.         //        如果输入的是负数
  22.     }else{
  23.         //        将结果存放到binary去
  24.         for (int i=0; i<=len-1; i++) {
  25.             binary[i] = (a>>(len-1-i)) & 1;
  26.         }
  27.         
  28.         //        取反
  29.         for (int i=1; i<=len-1; i++) {
  30.             binary[i] = (binary[i]+1)%2;
  31.         }
  32.         
  33.         //加 1
  34.         binary[len-1] += 1;
  35.         
  36.         //        检查每一位不能有2
  37.         for (int i = len-1; i >= 1; i--) {
  38.             if (binary[i] == 2) {
  39.                 binary[i-1] += 1;
  40.                 binary[i] -= 2;
  41.             }
  42.         }
  43.         printf("%d的二进制数为:",a);
  44.         
  45.         //        遍历打印binary
  46.         for (int i = 0; i < len; i++) {
  47.             if (i%8 == 0) {
  48.                 printf(" ");
  49.             }
  50.             printf("%d",binary[i]);
  51.             
  52.             
  53.             
  54.         }
  55.         
  56.         
  57.         
  58.         
  59.     }
  60.     return 0;
  61. }
复制代码

11 个回复

倒序浏览
强哥,我粗略看了下,你这个真的是转换二进制啊?
回复 使用道具 举报
TTsu 发表于 2015-9-4 20:05
强哥,我粗略看了下,你这个真的是转换二进制啊?

额,失误,不好意思已经改正!谢谢提醒!
回复 使用道具 举报
做的这么好是不是大牛,你这分够了呀
回复 使用道具 举报
郭占岭 发表于 2015-9-4 20:17
做的这么好是不是大牛,你这分够了呀

额,自己瞎捉摸的,指针学的烦的不行,瞎弄点东西,赚点分!
回复 使用道具 举报
1wang2huan 发表于 2015-9-4 20:19
额,自己瞎捉摸的,指针学的烦的不行,瞎弄点东西,赚点分!

恩恩,指针复习了一点,今天听的还行,不过忘了不少,还得复习下,明天估计就跟不上啦
回复 使用道具 举报
TTsu 中级黑马 2015-9-4 20:33:59
7#
1wang2huan 发表于 2015-9-4 20:13
额,失误,不好意思已经改正!谢谢提醒!

网页看你代码差点没看出所以然来,以为你自己探索出了新的进制转换方法,那实在超出我们几个世纪了,看到            printf("%d",(a>>(len-1-i)) & 1); 安心了点,你这慎密的思维和逻辑太强了,提问,可否左移&2 31次方实现二进制转换?
回复 使用道具 举报
TTsu 发表于 2015-9-4 20:33
网页看你代码差点没看出所以然来,以为你自己探索出了新的进制转换方法,那实在超出我们几个世纪了,看到    ...

粗约的看了一下,感觉应该可以,因为2的31次方也是只有一位是1,其他都是0;
由此推广,应该可以与所有的2的整数次方进行按位与,得出二进制!
回复 使用道具 举报
TTsu 中级黑马 2015-9-4 20:51:57
9#
1wang2huan 发表于 2015-9-4 20:42
粗约的看了一下,感觉应该可以,因为2的31次方也是只有一位是1,其他都是0;
由此推广,应该可以与所有的2的整 ...

可否给写一下哈,我弄不粗来,拜托拜托~
回复 使用道具 举报
nb,就是太复杂了,没有上课的代码易懂
回复 使用道具 举报
赞一个,果断大神!
回复 使用道具 举报
Judyisapunk 发表于 2015-9-4 21:15
nb,就是太复杂了,没有上课的代码易懂

我这是加了负数部分的优化,看着确实多!我已经优化请看http://bbs.itheima.com/thread-234522-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马