鱼C论坛

 找回密码
 立即注册
查看: 1083|回复: 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
#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>


来自翁凯老师的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

main(void)
{
        unsigned char A = 100 , B                                    ;
        char s[64]                                                   ;
        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" 前缀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

明显他是想要转化过程,不是printf结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[64] = {0}                             ;
        unsigned int k , m                                    ;
        char b[65]                                            ;
        for(k = 0 ; k < 10 ; k ++) e[k] = '0' + k             ;
        for(k = 0 ; k < 26 ; k ++) e[10 + k] = 'a' + k        ;
        for(k = 0 ; k < 26 ; k ++) e[36 + k] = 'A' + k        ;
        for(k = 0 ; k <  2 ; k ++) e[62 + k] = '#' + k        ;
        s[0] = '\0'                                           ;
        if(w > 1 && w < 65) {
                for(m = 0 ; a ; a /= w) b[m ++] = e[a % w]    ;
                for(k = 0 ; k < m ; k ++) s[k] = b[m - k - 1] ;
                s[m] = '\0'                                   ;
        }
        return s                                              ;
}

main(void)
{
        unsigned long long A = 100 , B                                                                                             ;
        char s[4][65]                                                                                                              ;
        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)) ;
        B = A >> 1                                                                                                                 ;
        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)) ;
        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 进制数的自由转换
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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>


来自翁凯老师的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 21:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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