鱼C论坛

 找回密码
 立即注册
查看: 1513|回复: 4

[已解决]c语言如何将整数转化为二进制

[复制链接]
发表于 2019-11-13 23:01:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
A=100,请使用二进制、八进制、十进制、十六进制输出A。再使用位运算符对A进行操作,然后赋值给B,使B=50
这二进制如何存起来 并且赋值给b使得b=50 求助
最佳答案
2019-11-14 20:29:54
  1. #include <stdio.h>
  2. int main(int argc, char const *argv[])
  3. {
  4.     int num = 0;
  5.     scanf("%d", &num);
  6.     unsigned mask = 1u << 31;
  7.     for (; mask; mask >>= 1)
  8.     {
  9.         printf("%d", num & mask ? 1 : 0);
  10.     }
  11.     printf("\n");
  12.     return 0;
  13. }
复制代码

----------------------------------------------------
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-3fbozdzt.44g --stdout=Microsoft-MIEngine-Out-k2zwbi4c.qvk --stderr=Microsoft-MIEngine-Error-22qu2dt0.ymg --pid=Microsoft-MIEngine-Pid-wh0gx1xd.20o --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
1
00000000000000000000000000000001


E:\Users\admin\Documents\VScode>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-my3xhbcw.bhs --stdout=Microsoft-MIEngine-Out-0kc3rkbe.ebh --stderr=Microsoft-MIEngine-Error-isx5ao5v.gml --pid=Microsoft-MIEngine-Pid-1fd1ixep.ctg --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
1025656
00000000000011111010011001111000


E:\Users\admin\Documents\VScode>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-xyt1a4bk.1dg --stdout=Microsoft-MIEngine-Out-whbbk4p4.hnw --stderr=Microsoft-MIEngine-Error-zwxqzoq1.awf --pid=Microsoft-MIEngine-Pid-vkoiffks.ezp --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
99999
00000000000000011000011010011111


E:\Users\admin\Documents\VScode>


来自翁凯老师的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-14 00:08:16 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2019-11-14 00:33 编辑
  1. #include <stdio.h>

  2. char * binstr(char * s , unsigned char a)
  3. {
  4.         unsigned int i , k , m                                       ;
  5.         char b[64]                                                   ;
  6.         for(i = a , m = 0 ; i ; i /= 2) b[m ++] = i % 2 + 0x30       ;
  7.         for(k = 0 ; k < m ; k ++) s[k] = b[m - k - 1]                ;
  8.         s[m] = '\0'                                                  ;
  9.         return s                                                     ;
  10. }

  11. main(void)
  12. {
  13.         unsigned char A = 100 , B                                    ;
  14.         char s[64]                                                   ;
  15.         printf("0b%s\t0o%o\t%u\t0x%x\n" , binstr(s , A) , A , A , A) ;
  16.         B = A >> 1                                                   ;
  17.         printf("0b%s\t0o%o\t%d\t0x%x\n" , binstr(s , B) , B , B , B) ;
  18.         return 0                                                     ;
  19. }
复制代码


        编译、运行情况:
  1. C:\Bin>g++ -o x x.c

  2. C:\Bin>x
  3. 0b1100100       0o144   100     0x64
  4. 0b110010        0o62    50      0x32

  5. C:\Bin>
复制代码


        注:二进制添加了 "0b" 前缀,八进制添加了 "0o" 前缀,十六进制添加了 "0x" 前缀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-14 10:39:53 | 显示全部楼层
jackz007 发表于 2019-11-14 00:08
编译、运行情况:

明显他是想要转化过程,不是printf结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-14 11:09:41 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-14 14:33 编辑
ba21 发表于 2019-11-14 10:39
明显他是想要转化过程,不是printf结果


    那就干脆来个简单粗暴的:
  1. #include <stdio.h>

  2. char * d2str(char * s , unsigned long long a , int w)
  3. {
  4.         unsigned char e[64] = {0}                             ;
  5.         unsigned int k , m                                    ;
  6.         char b[65]                                            ;
  7.         for(k = 0 ; k < 10 ; k ++) e[k] = '0' + k             ;
  8.         for(k = 0 ; k < 26 ; k ++) e[10 + k] = 'a' + k        ;
  9.         for(k = 0 ; k < 26 ; k ++) e[36 + k] = 'A' + k        ;
  10.         for(k = 0 ; k <  2 ; k ++) e[62 + k] = '#' + k        ;
  11.         s[0] = '\0'                                           ;
  12.         if(w > 1 && w < 65) {
  13.                 for(m = 0 ; a ; a /= w) b[m ++] = e[a % w]    ;
  14.                 for(k = 0 ; k < m ; k ++) s[k] = b[m - k - 1] ;
  15.                 s[m] = '\0'                                   ;
  16.         }
  17.         return s                                              ;
  18. }

  19. main(void)
  20. {
  21.         unsigned long long A = 100 , B                                                                                             ;
  22.         char s[4][65]                                                                                                              ;
  23.         printf("0b%s\t0o%s\t%s\t0x%s\n" , d2str(s[0] , A , 2) , d2str(s[1] , A , 8) , d2str(s[2] , A , 10) , d2str(s[3] , A , 16)) ;
  24.         B = A >> 1                                                                                                                 ;
  25.         printf("0b%s\t0o%s\t%s\t0x%s\n" , d2str(s[0] , B , 2) , d2str(s[1] , B , 8) , d2str(s[2] , B , 10) , d2str(s[3] , B , 16)) ;
  26.         return 0                                                                                                                   ;
  27. }
复制代码

       编译、运行实况:
  1. C:\Bin>g++ -o a a.c

  2. C:\Bin>a
  3. 0b1100100       0o144   100     0x64
  4. 0b110010        0o62    50      0x32

  5. C:\Bin>
复制代码

        注:二进制添加了 "0b" 前缀,八进制添加了 "0o" 前缀,十六进制添加了 "0x" 前缀。

        正如你所看到的那样,自编函数 d2str() 支持整型数到 2 ~ 64 进制数的自由转换
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-14 20:29:54 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. int main(int argc, char const *argv[])
  3. {
  4.     int num = 0;
  5.     scanf("%d", &num);
  6.     unsigned mask = 1u << 31;
  7.     for (; mask; mask >>= 1)
  8.     {
  9.         printf("%d", num & mask ? 1 : 0);
  10.     }
  11.     printf("\n");
  12.     return 0;
  13. }
复制代码

----------------------------------------------------
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-3fbozdzt.44g --stdout=Microsoft-MIEngine-Out-k2zwbi4c.qvk --stderr=Microsoft-MIEngine-Error-22qu2dt0.ymg --pid=Microsoft-MIEngine-Pid-wh0gx1xd.20o --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
1
00000000000000000000000000000001


E:\Users\admin\Documents\VScode>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-my3xhbcw.bhs --stdout=Microsoft-MIEngine-Out-0kc3rkbe.ebh --stderr=Microsoft-MIEngine-Error-isx5ao5v.gml --pid=Microsoft-MIEngine-Pid-1fd1ixep.ctg --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
1025656
00000000000011111010011001111000


E:\Users\admin\Documents\VScode>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-xyt1a4bk.1dg --stdout=Microsoft-MIEngine-Out-whbbk4p4.hnw --stderr=Microsoft-MIEngine-Error-zwxqzoq1.awf --pid=Microsoft-MIEngine-Pid-vkoiffks.ezp --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
99999
00000000000000011000011010011111


E:\Users\admin\Documents\VScode>


来自翁凯老师的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 20:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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