十进制转二进制的三种方法
十进制转二进制要注意考虑负数:
计算机中负数的存储一般用补码储存
负数的补码=对应正数的原码按位取反再加一
目录
方法一:直接转换法
方法二:利用无符号数机制
方法三:位运算
方法一:直接转换法:
#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;
}
十进制转二进制的三种方法相关推荐
- 二进制(二):十进制转二进制的两种方法
前一篇已经简单介绍了二进制,现在来介绍如何把我们常用的十进制数字转换成二进制.十进制转二进制有两种方法: 一.连除法(把十进制数字除以2,得到商和余数,再把商除2,直到除到0为止,然后按倒序把余数排列 ...
- 十进制转为二进制的两种方法
十进制(以十为基础进位)数系的每一个位值有十个可能的值(0.1.2.3.4.5.6.7.8.9).相反二进制(以二为基数进位)数系只有两个可能的值,即0和1.[1] 二进制系统是电子计算机的基本语言, ...
- 十进制转换为二进制的几种方法
除基倒取余法 这是最符合我们平时的数学逻辑思维,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2-依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二进制数. publi ...
- 十进制转化为二进制的几种方法
/十进制转二进制的三种方法/ package 数据结构; import java.util.Scanner;; public class 十转二进制 { public static void main ...
- 把十进制转化为二进制的一种方法
把十进制转化为二进制的一种方法: void pb(int n){if(n != 0){pb(n/2);putchar('0'+n%2);} }int main(void){for(int i=10; ...
- 平摊分析的三种方法(聚集、会计和势能)+举例(栈操作、二进制加法器、动态表)
平摊分析(摊还分析) 我们有时候会有一个算法,或者只是单纯的一系列操作,当我们需要将这一些操作计算一个平均代价,但是又不涉及概率的问题,我们就可以使用平摊分析. 就比如一个月的账单,可能每一天都是正常 ...
- 写一个函数返回参数二进制中 1 的个数(三种方法)
1.运用了除法,取余方式递推出结构 2.运用右移符(>>)运算 3.利用算术与(&)运算 三种方法效率越来越高,减少成本 #include<stdio.h>int Nu ...
- php读取文件内容不全,php读取文件内容的三种方法
//**************第一种读取方式***************************** 代码如下: header("content-type:text/html;chars ...
- python一次性读取整个文件-python逐行读取文件内容的三种方法
一.使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. 二.需要导入import os 三.下面是逐行读取文件内容的三种方法: ...
最新文章
- WinCE应用程序最小化后的最大化
- 写博客必备的复制黏贴
- 【通俗易懂】理解Python中的if __name__ == ‘__main__‘
- 面试中关于多线程同步,你必须要思考的问题
- zend api 深入 php 内核,Zend API:深入 PHP 内核
- desktop.ini winxp之马上更新图标
- SmallMQ实现发布
- ccs中display:none visibility:hidden opacity:0的区别
- 【LeetCode】【数组】题号:*697,相同度的最短连续子数组
- uploader java_java-webuploader+Java如何实现分片+断点续传
- webservice服务器框架配置文件,基于Maven环境进行Spring集成CXF WebService框架
- 大学英语2 unit4 第五题
- 【BZOJ】3993: [SDOI2015]星际战争
- C++代码静态分析与优化(10)_rats
- 里恩EDC详解临床研究常用的设计类型
- mlp原来是这么回事
- ue编辑C语言灰色,UltraEdit如何实行列模式编辑
- 容大电子秤传称_容大条码秤的传秤配置(旧版)
- 3. iphone项目如何联机调试和发布程序(99$)
- 【linux】ssh远程进行teamviewer配置