reverse-bits ,https://leetcode.com/problems/reverse-bits/

发布于 2022-09-01 19:49:44 字数 1025 浏览 14 评论 0


#include <stdio.h>
#include <string.h>

typedef unsigned int uint32_t;

void f10to2(int n,char *buf)
{
    int temp = n;
    int num;
    int i=0,j =0;
    while(temp !=0)
    {
        num = temp%2;
        buf[i] = num + '0';
        i++;
        temp = temp/2;
    }
    for (int i = 0; i < 32; ++i)
    {
        printf("%c", buf[i]);
    }
}

uint32_t f2to10(char *buf)
{
    uint32_t number =0;
    int n =31,w=1;
    char* p=buf;
    // 转换2进制到10进制
    while(n >=0)
    {
        number += (buf[n]-'0')*w;
        w*=2;
        n--;
    }
    return number;
}

uint32_t reverseBits(uint32_t n) {

    char buf[32];
    memset(buf,'0',32);
    uint32_t res =0;
    f10to2(n,buf);
    res = f2to10(buf);
    return res;
}
int main() {

    uint32_t n = 2147483648;
    
    reverseBits(n);
    return 0;
}

此时运行结果为 4294967295 (11111111111111111111111111111111),怎么会这样啊,void f10to2(int n,char *buf),中printf输出的buf内容好奇怪!应该是 1 (00000000000000000000000000000001)才对呀

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文