c语言如何将整数转化为二进制
A=100,请使用二进制、八进制、十进制、十六进制输出A。再使用位运算符对A进行操作,然后赋值给B,使B=50这二进制如何存起来 并且赋值给b使得b=50 求助 本帖最后由 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" 前缀 jackz007 发表于 2019-11-14 00:08
编译、运行情况:
明显他是想要转化过程,不是printf结果 本帖最后由 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 进制数的自由转换。 #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]