不悔Drew 2022-07-14 23:27 采纳率: 100%
浏览 31
已结题

关于十进制转二进制的方法问题

众所周知,十进制转二进制的常用方法是除2取余法。这种方法刚开始学的时候感觉很巧妙,可是我后面越想越不对劲,这不是多此亿举吗?

举个例子,假设有一个short类型数据为11,并且我的系统中short长度为16bit,那么它在内存中的表示应为000000000001011,那么很明显,我们能直接取1011(先不考虑负数)。而如果用除二取余的话,就算使用位运算符,效率也明显比前一种方法慢了至少10倍。

这是网上的十进制转二进制方法


int main(){
    cin>>n;
    while(n!=0){
        ans[len] = n % 2;
        len++;
        n = n / 2;
    }
    for(int i=len-1;i>=0;i--){
        printf("%d",ans[i]);
    }
    return 0;
} 

那么有没有一种数据结构或函数(C++),它可以直接获取内存中的二进制数据,并把每个值插入到一个每个数据只有一位的整型数组呢?(假设这种整型叫bit,函数叫bin(),那么对于一个short数据18,则可以输入以下代码)

int main(){

    bit n[16];
    bin(n);
    return 0;
}

我在网上查了很久,始终没有任何人说过关于这方面的内容,但是我查到了Python中有类似函数()
  • 写回答

2条回答 默认 最新

  • 不吐泡泡的咸鱼 2022-07-14 23:55
    关注

    对于10进制转2进制表示,你所疑惑的问题本质其实是二进制的位表示和二进制的字符表示之间的转换,他们是两种内存表示,每以为的单元,以及长度都不相同,不能像int转float一样直接重新解释内存就可以得到,所以转换是必须的。即使使用bin函数,也是在该函数内做的转换。

    // 2进制位表示
    |---------------|
    |0|0|1|0|1|1|0|1|
    |---------------|
    
    // 2进制字符表示
    |---------------|---------------|---------------|---------------|---------------|---------------|
    |----..HL3------|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|
    |---------------|---------------|---------------|---------------|---------------|---------------|
    
    // short内存表示
    |---------------|---------------|
    |0|0|0|0|0|0|0|0|0|0|1|0|1|1|0|1|
    |---------------|---------------|
    
    // int 内存表示
    |---------------|---------------|---------------|---------------|
    |0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|1|1|0|1|
    |---------------|---------------|---------------|---------------|
    
    拿着地位地址重新解释即可完成short和int的转换,但是整型转char[]是两种不同的内存表示,无法通过重新解释来完成。必须使用程序方式加以转换
    

    至于转换的方式,求余是一种方式,当然你也可以使用000...1...0掩码来与原数字相与来完成这种转换,不论那种方式,对于int n,其时间复杂度至少在O(log2)。不过第二种方式在并行运算下理论上可以有更好的运行效率

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月4日
  • 已采纳回答 7月27日
  • 创建了问题 7月14日

悬赏问题

  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”