十进制转二进制要注意考虑负数:
计算机中负数的存储一般用补码储存
负数的补码=对应正数的原码按位取反再加一

目录

方法一:直接转换法

方法二:利用无符号数机制

方法三:位运算


方法一:直接转换法:

#include<stdio.h>
#include<stdlib.h>
#define OK 1
int dectobin(int n,char*p,int l){
//l表示要转化的长度 返回值int表示是否转h化正确int k=0;int i=l-1;if(n<0){n=-1*n;k=-1;}while(n>0){p[i]=n%2+48;n=n/2;i--;}while(i>=0){p[i]=48;i--;}if(k==-1){int i=0;while(i<l){p[i]=p[i]=='1'?'0':'1';i++;}i--;for(int i=l-1;i>=0;i--){if(p[i]=='0'){p[i]='1';break;}else{p[i]='0';}}}return OK;
}
int main(){char* p=(char*)malloc(sizeof(char)*32);dectobin(-120,p,32);//printf("%c",p[0]);for(int i=0;i<32;i++){printf("%c",p[i]);}
} 

方法二:利用无符号数机制:

因为每个负数的补码其实都等于一个正数的原码(比如:

对于8位二进制来说

-1的补码就是255的原码

可以巧妙地利用这个现象简化算法

#include<stdio.h>
#include<stdlib.h>
#define OK 1
int dectobin(unsigned n,char*p,int l){int k=0;int i=l-1;
//  if(n<0){
//      n=-1*n;
//      k=-1;
//  }while(n>0){p[i]=n%2+48;n=n/2;i--;}while(i>=0){p[i]=48;i--;}
//  if(k==-1){
//      int i=0;
//
//      while(i<l){
//          p[i]=p[i]=='1'?'0':'1';
//          i++;
//      }
//      i--;
//      for(int i=l-1;i>=0;i--){
//          if(p[i]=='0'){
//              p[i]='1';
//              break;
//          }
//          else
//          {
//              p[i]='0';
//          }
//      }
//  }return OK;
}
int main(){char* p=(char*)malloc(sizeof(char)*32);dectobin(-120,p,32);//printf("%c",p[0]);for(int i=0;i<32;i++){printf("%c",p[i]);}
} 

方法三:位运算

(利用计算机本就是用二进制存储数据的机制,直接用位运算取出)

#include<stdio.h>
#include<stdlib.h>
#define OK 1
int dectobin(int n,int *p,int l){for(int i=31;i>=0;i--){p[31-i]=n&(1<<i)?1:0;}return OK;}
int main(){//printf("%d",9);fflush(stdout);int *p=(int*)malloc(sizeof(32));//p[0]='0';dectobin(100,p,32);//printf("%d",p[0])for(int i=0;i<32;i++){printf("%d",p[i]);}return 0;
}

十进制转二进制的三种方法相关推荐

  1. 二进制(二):十进制转二进制的两种方法

    前一篇已经简单介绍了二进制,现在来介绍如何把我们常用的十进制数字转换成二进制.十进制转二进制有两种方法: 一.连除法(把十进制数字除以2,得到商和余数,再把商除2,直到除到0为止,然后按倒序把余数排列 ...

  2. 十进制转为二进制的两种方法

    十进制(以十为基础进位)数系的每一个位值有十个可能的值(0.1.2.3.4.5.6.7.8.9).相反二进制(以二为基数进位)数系只有两个可能的值,即0和1.[1] 二进制系统是电子计算机的基本语言, ...

  3. 十进制转换为二进制的几种方法

    除基倒取余法 这是最符合我们平时的数学逻辑思维,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2-依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二进制数. publi ...

  4. 十进制转化为二进制的几种方法

    /十进制转二进制的三种方法/ package 数据结构; import java.util.Scanner;; public class 十转二进制 { public static void main ...

  5. 把十进制转化为二进制的一种方法

    把十进制转化为二进制的一种方法: void pb(int n){if(n != 0){pb(n/2);putchar('0'+n%2);} }int main(void){for(int i=10; ...

  6. 平摊分析的三种方法(聚集、会计和势能)+举例(栈操作、二进制加法器、动态表)

    平摊分析(摊还分析) 我们有时候会有一个算法,或者只是单纯的一系列操作,当我们需要将这一些操作计算一个平均代价,但是又不涉及概率的问题,我们就可以使用平摊分析. 就比如一个月的账单,可能每一天都是正常 ...

  7. 写一个函数返回参数二进制中 1 的个数(三种方法)

    1.运用了除法,取余方式递推出结构 2.运用右移符(>>)运算 3.利用算术与(&)运算 三种方法效率越来越高,减少成本 #include<stdio.h>int Nu ...

  8. php读取文件内容不全,php读取文件内容的三种方法

    //**************第一种读取方式***************************** 代码如下: header("content-type:text/html;chars ...

  9. python一次性读取整个文件-python逐行读取文件内容的三种方法

    一.使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. 二.需要导入import os 三.下面是逐行读取文件内容的三种方法: ...

最新文章

  1. WinCE应用程序最小化后的最大化
  2. 写博客必备的复制黏贴
  3. 【通俗易懂】理解Python中的if __name__ == ‘__main__‘
  4. 面试中关于多线程同步,你必须要思考的问题
  5. zend api 深入 php 内核,Zend API:深入 PHP 内核
  6. desktop.ini winxp之马上更新图标
  7. SmallMQ实现发布
  8. ccs中display:none visibility:hidden opacity:0的区别
  9. 【LeetCode】【数组】题号:*697,相同度的最短连续子数组
  10. uploader java_java-webuploader+Java如何实现分片+断点续传
  11. webservice服务器框架配置文件,基于Maven环境进行Spring集成CXF WebService框架
  12. 大学英语2 unit4 第五题
  13. 【BZOJ】3993: [SDOI2015]星际战争
  14. C++代码静态分析与优化(10)_rats
  15. 里恩EDC详解临床研究常用的设计类型
  16. mlp原来是这么回事
  17. ue编辑C语言灰色,UltraEdit如何实行列模式编辑
  18. 容大电子秤传称_容大条码秤的传秤配置(旧版)
  19. 3. iphone项目如何联机调试和发布程序(99$)
  20. 【linux】ssh远程进行teamviewer配置

热门文章

  1. 情感分类《Thumbs up?Sentiment Classification using Machine Learning Techniques》
  2. 日记,我的初次创业bp(商业计划书)
  3. excel2013设置字体颜色快捷键
  4. 【美化§小熊设计xp电脑主题】
  5. 刷了一天回溯算法 2022年6月16日
  6. Linux运行指令(axel多线程下载工具)
  7. 设置CSS透明度的方法
  8. 【淘宝开店教程】教你借618大促打造店铺爆款宝贝
  9. IX redis(2)
  10. 老板想要的简单方案 vs. 程序员理解的需求 |漫画