BadWomen 发表于 2019-11-13 23:01:09

c语言如何将整数转化为二进制

A=100,请使用二进制、八进制、十进制、十六进制输出A。再使用位运算符对A进行操作,然后赋值给B,使B=50
这二进制如何存起来 并且赋值给b使得b=50 求助

jackz007 发表于 2019-11-14 00:08:16

本帖最后由 jackz007 于 2019-11-14 00:33 编辑

#include <stdio.h>

char * binstr(char * s , unsigned char a)
{
      unsigned int i , k , m                                       ;
      char b                                                   ;
      for(i = a , m = 0 ; i ; i /= 2) b = i % 2 + 0x30       ;
      for(k = 0 ; k < m ; k ++) s = b                ;
      s = '\0'                                                ;
      return s                                                   ;
}

main(void)
{
      unsigned char A = 100 , B                                    ;
      char s                                                   ;
      printf("0b%s\t0o%o\t%u\t0x%x\n" , binstr(s , A) , A , A , A) ;
      B = A >> 1                                                   ;
      printf("0b%s\t0o%o\t%d\t0x%x\n" , binstr(s , B) , B , B , B) ;
      return 0                                                   ;
}

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

C:\Bin>x
0b1100100       0o144   100   0x64
0b110010      0o62    50      0x32

C:\Bin>

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

ba21 发表于 2019-11-14 10:39:53

jackz007 发表于 2019-11-14 00:08
编译、运行情况:




明显他是想要转化过程,不是printf结果

jackz007 发表于 2019-11-14 11:09:41

本帖最后由 jackz007 于 2019-11-14 14:33 编辑

ba21 发表于 2019-11-14 10:39
明显他是想要转化过程,不是printf结果

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

char * d2str(char * s , unsigned long long a , int w)
{
      unsigned char e = {0}                           ;
      unsigned int k , m                                    ;
      char b                                          ;
      for(k = 0 ; k < 10 ; k ++) e = '0' + k             ;
      for(k = 0 ; k < 26 ; k ++) e = 'a' + k      ;
      for(k = 0 ; k < 26 ; k ++) e = 'A' + k      ;
      for(k = 0 ; k <2 ; k ++) e = '#' + k      ;
      s = '\0'                                           ;
      if(w > 1 && w < 65) {
                for(m = 0 ; a ; a /= w) b = e    ;
                for(k = 0 ; k < m ; k ++) s = b ;
                s = '\0'                                 ;
      }
      return s                                              ;
}

main(void)
{
      unsigned long long A = 100 , B                                                                                             ;
      char s                                                                                                            ;
      printf("0b%s\t0o%s\t%s\t0x%s\n" , d2str(s , A , 2) , d2str(s , A , 8) , d2str(s , A , 10) , d2str(s , A , 16)) ;
      B = A >> 1                                                                                                               ;
      printf("0b%s\t0o%s\t%s\t0x%s\n" , d2str(s , B , 2) , d2str(s , B , 8) , d2str(s , B , 10) , d2str(s , B , 16)) ;
      return 0                                                                                                                   ;
}
       编译、运行实况:
C:\Bin>g++ -o a a.c

C:\Bin>a
0b1100100       0o144   100   0x64
0b110010      0o62    50      0x32

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

      正如你所看到的那样,自编函数 d2str() 支持整型数到 2 ~ 64 进制数的自由转换。

bin554385863 发表于 2019-11-14 20:29:54

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int num = 0;
    scanf("%d", &num);
    unsigned mask = 1u << 31;
    for (; mask; mask >>= 1)
    {
      printf("%d", num & mask ? 1 : 0);
    }
    printf("\n");
    return 0;
}

----------------------------------------------------
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>

来自翁凯老师的代码
页: [1]
查看完整版本: c语言如何将整数转化为二进制