十进制转二进制 C语言

合集下载

4.C语言之十进制与二进制之间的转换

4.C语言之十进制与二进制之间的转换

C语言之十二转换在C语言程序中,各种类型的变量大多是以十进制的形式描述的,但是实际上这些变量在C语言中是以二进制的形式储存的,那么有些朋友就问了,数据的十进制和二进制之间是怎么进行互换的呢?我们首先来看整形数的二进制表示:对于整型数据而言,分为有符号和无符号两种,有符号的整型数既可以是正数又可以是负数,正负号由字节的最高位来表示,0表示正数,1表示负数。

我们来看有符号的二进制整型数:在学习之前我们要知道,一个字节表示的数据在二进制中是8位。

例如:一个字节表示的数:10110100,将这个二进制数据转换为十进制数据。

解:我们知道这个数据是有符号型数据,所以二进制数据的第一位是符号位,1表示负数,所以我们知道了这个十进制数是一个负数。

剩下的我们从右往左进行“遇一,二次幂相加”,这是什么意思呢?就是遇见1的时候就看看是2的几次幂,这就是数学上的计算,只不过是将数学上的十的几次幂换成了,二的几次幂,因为十进制是逢十进一,二进制顾名思义就是逢二进一了。

所以剩下的0110100就是这样的:从右往左数第三位上出现了1,这时是2^2,依次类推,2^4,2^5,最后进行相加:2^2+2^4+2^5=52,加上前面的符号位:就是十进制整型数:-52.下面我们再来看看无符号的二进制整型数据:无符号的二进制整型数据其最高位的0和1表示的不在是符号位,而是代表具体的数值。

下面我们还是以实际例子来说明:例如:一个字节表示的数10110100,他的十进制数的计算方法还是使用“遇一,二次幂相加”。

解:从右往左第一个1出现的位置是在第三位上出现:2^2,依次类推:2^2+2^4+2^5+2^7=180。

我们知道了二进制转换为十进制的方法之后,我们在来看看十进制转换为二进制:与上面的类似:十进制转化为二进制的方法是利用“短除二法”。

下面我们具体来看看这种方法。

所谓短除二法就是用这个数据一直除二,知道商为0为止。

下面我们来看一个实例:十进制数-52转化为二进制数。

c语言十进制转换为二进制的方法递归

c语言十进制转换为二进制的方法递归

c语言十进制转换为二进制的方法递归C语言是一种广泛应用于计算机科学和编程领域的编程语言。

它的强大之处不仅在于它的灵活性和高效性,还在于它提供了丰富的功能和工具来处理数据转换和计算。

其中一个常见的需求就是将十进制数转换为二进制数。

这篇文章将详细介绍如何使用递归方法来完成这个任务,并探讨一些相关的概念和原理。

1. 什么是递归?递归是一种在程序中自我调用的方式。

简单来说,就是在解决一个问题的过程中,不断地将该问题拆分成更小的子问题,直到达到最小可解的基本情况。

在本文中,我们将利用递归的思想将十进制数转换为二进制数。

2. 十进制数转换为二进制数的基本原理在开始具体介绍递归方法之前,我们先来了解一下十进制数和二进制数的基本概念。

十进制数是我们日常生活中最为常见的数字系统,而二进制数是计算机中使用的一种数字系统,它只包含0和1两个数字。

将一个十进制数转换为二进制数的基本原理是通过反复地进行除以2的操作,将余数记录下来,然后再将商作为新的被除数继续除以2,直到商为0为止。

最后将记录下来的余数反向拼接起来,就得到了对应的二进制数。

3. 递归方法的实现以下是一个用递归方法将十进制数转换为二进制数的C语言代码示例:```c#include <stdio.h>void decimalToBinary(int decimal) {if (decimal > 0) {decimalToBinary(decimal / 2);printf("%d", decimal % 2);}}int main() {int decimal;printf("请输入一个十进制数:");scanf("%d", &decimal);printf("对应的二进制数为:");decimalToBinary(decimal);return 0;}```在这段代码中,我们定义了一个递归函数`decimalToBinary`,用来完成十进制数到二进制数的转换。

c语言各进制转换方法

c语言各进制转换方法

二进制,八进制,十进制,十六进制之间的转换算法一、十进制与二进制之间的转换(1)十进制转换为二进制,分为整数部分和小数部分①整数部分方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。

下面举例:例:将十进制的168转换为二进制得出结果将十进制的168转换为二进制,(10101000)2分析:第一步,将168除以2,商84,余数为0。

第二步,将商84除以2,商42余数为0。

第三步,将商42除以2,商21余数为0。

第四步,将商21除以2,商10余数为1。

第五步,将商10除以2,商5余数为0。

第六步,将商5除以2,商2余数为1。

第七步,将商2除以2,商1余数为0。

第八步,将商1除以2,商0余数为1。

第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,即10101000(2)小数部分方法:乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。

如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。

换句话说就是0舍1入。

读数要从前面的整数读到后面的整数,下面举例:例1:将0.125换算为二进制得出结果:将0.125换算为二进制(0.001)2分析:第一步,将0.125乘以2,得0.25,则整数部分为0,小数部分为0.25;第二步, 将小数部分0.25乘以2,得0.5,则整数部分为0,小数部分为0.5;第三步, 将小数部分0.5乘以2,得1.0,则整数部分为1,小数部分为0.0;第四步,读数,从第一位读起,读到最后一位,即为0.001。

例2,将0.45转换为二进制(保留到小数点第四位)大家从上面步骤可以看出,当第五次做乘法时候,得到的结果是0.4,那么小数部分继续乘以2,得0.8,0.8又乘以2的,到1.6这样一直乘下去,最后不可能得到小数部分为零,因此,这个时候只好学习十进制的方法进行四舍五入了,但是二进制只有0和1两个,于是就出现0舍1入。

c语言进制转换函数

c语言进制转换函数

c语言进制转换函数1. **十进制转二进制**:使用 `itoa()` 函数将十进制数转换为二进制字符串。

```c#include <stdlib.h>#include <stdio.h>int main() {int decimalNumber = 13;char binaryString[33];// 调用 itoa() 函数进行转换itoa(decimalNumber, binaryString, 2);printf("十进制数 %d 转换为二进制为:%s\n", decimalNumber, binaryString); return 0;}```2. **十进制转八进制**:使用 `itoa()` 函数将十进制数转换为八进制字符串。

```c#include <stdlib.h>#include <stdio.h>int main() {int decimalNumber = 13;char octalString[33];// 调用 itoa() 函数进行转换itoa(decimalNumber, octalString, 8);printf("十进制数 %d 转换为八进制为:%s\n", decimalNumber, octalString); return 0;}```3. **十进制转十六进制**:使用 `itoa()` 函数将十进制数转换为十六进制字符串。

```c#include <stdlib.h>#include <stdio.h>int main() {int decimalNumber = 13;char hexadecimalString[33];// 调用 itoa() 函数进行转换itoa(decimalNumber, hexadecimalString, 16);printf("十进制数%d 转换为十六进制为:%s\n", decimalNumber, hexadecimalString);return 0;}```这些函数将十进制数转换为相应进制的字符串表示。

c语言十进制转换为二进制固定8位并逐位输出

c语言十进制转换为二进制固定8位并逐位输出

c语言十进制转换为二进制固定8位并逐位输出标题:C语言中十进制转换为二进制固定8位并逐位输出的方法——深入理解二进制表示概要:本文将详细介绍如何使用C语言将十进制数转换为二进制,并将其输出为固定8位的二进制数。

通过对二进制表示的深入讨论,我们将帮助读者更好地理解二进制数的原理和应用。

文章将从简单的二进制基础知识开始,逐步探索如何进行十进制到二进制的转换,同时提供一些实用技巧和编程示例。

目录:1. 了解二进制表示2. 十进制到二进制的转换方法2.1 除二取余法2.2 移位法3. 固定8位的二进制输出4. 编程实例5. 总结与展望1. 了解二进制表示二进制是一种由0和1组成的系统,是计算机中最基本的数值系统。

在二进制中,每一位表示一个值的倍数,从右至左分别为1、2、4、8、16……。

理解二进制的基本原理对于计算机编程非常重要,因为计算机内部的所有数据都以二进制形式存储和处理。

2. 十进制到二进制的转换方法2.1 除二取余法将十进制数除以2,将得到的余数作为二进制数的最低位,将商继续除以2,直到商为0为止。

将余数的顺序颠倒即可得到十进制数的二进制表示。

这种方法简单易懂,适合手动计算小范围的二进制数。

2.2 移位法移位法是一种更常用的将十进制数转换为二进制的方法。

通过将十进制数不断右移,并记录每次移位后的最低位,最终得到二进制表示。

这种方法不需要进行除法运算,适合在计算机程序中使用。

3. 固定8位的二进制输出在C语言中,固定输出8位的二进制数可以使用位运算和格式控制符来实现。

通过逐位输出二进制数的每一位,我们可以在控制台或文件中实现固定位数的二进制输出。

4. 编程示例下面是一个使用C语言将十进制数转换为固定8位二进制并逐位输出的示例程序:```c#include <stdio.h>void printBinary(int decimal) { int i;for (i = 7; i >= 0; i--) {int bit = (decimal >> i) & 1; printf("%d", bit);}}int main() {int decimal;printf("请输入一个十进制数:"); scanf("%d", &decimal);printf("二进制表示为:");printBinary(decimal);printf("\n");return 0;}```5. 总结与展望通过本文,我们深入探讨了十进制数转换为固定8位二进制并逐位输出的方法。

c语言各进制转换方法

c语言各进制转换方法
①将十六进制6E.2转换为二进制数
因此得到结果:将十六进制6E.2转换为二进制为01101110.0010即110110.001
四、八进制与十六进制的转换
方法:一般不能互相直接转换,一般是将八进制(或十六进制)转换为二进制,然后再将二进制转换为十六进制(或八进制),小数点位置不变。那么相应的转换请参照上面二进制与八进制的转换和二进制与十六进制的转
2)直接法:前面我们讲过,八进制是由二进制衍生而来的,因此我们可以采用与十进制转换为二进制相类似的方法,还是整数部分的转换和小数部分的转换,下面来具体讲解一下:
①整数部分
方法:除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。
小数点的最右边(即整数的最高位和小数的最低位)才能添0或者去0,否则将产生错误
三、 二进制与十六进制的转换
方法:与二进制与八进制转换相似,只不过是一位(十六)与四位(二进制)的转换,下面具体讲解
(1) 二进制转换为十六进制
例2,将0.45转换为二进制(保留到小数点第四位)
大家从上面步骤可以看出,当第五次做乘法时候,得到的结果是0.4,那么小数部分继续乘以2,得0.8,0.8又乘以2的,到1.6这样一直乘下去,最后不可能得到小数部分为零,因此,这个时候只好学习十进制的方法进行四舍五入了,但是二进制只有0和1两个,于是就出现0舍1入。这个也是计算机在转换中会产生误差,但是由于保留位数很多,精度很高,所以可以忽略不计。
①例:将二进制11101001.1011转换为十六进制
得到结果:将二进制11101001.1011转换为十六进制为E9.B

十进制数转换成二进制,八进制,十六进制(c语言)

十进制数转换成二进制,八进制,十六进制(c语言)
printf("\n");
}
int InitStack(SqStack &S)
{
S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
int GetTop(SqStack S,int &e)
{
if(S.top==S.base) return ERROR;
e=*(S.top-1);
return OK;
}
int Push(SqStack &S,int e)
{
if((S.top-S.base)>=S.stacksize)
SqStack S;
InitStack(S);
printf("请选择转换类型:1:十进制->二进制 2:十进制->八进制 3:十进制->十六进制 \n");
printf("请输入你的选择:");
scanf("%d",&Cho);
switch(Cho)
{
case 1:cj=2;printf("你选择的是十进制转换成二进制\n\n");printf("请输入要转换的十进制数:");scanf("%d",&N);break;
if(S.top!=S.base) return 0;
}
default:printf("请从1-3中选择!");

十进制转化为二进制栈代码c语言

十进制转化为二进制栈代码c语言

十进制转化为二进制栈代码c语言本文介绍如何使用栈实现将十进制数字转化为二进制数字的代码,使用的编程语言是C语言。

首先,需要定义一个栈的结构体,包括栈顶指针和栈的大小: ```#define MAX_STACK_SIZE 100typedef struct {int top;int data[MAX_STACK_SIZE];} Stack;```然后,需要实现几个基本的栈操作函数,包括入栈、出栈、判断栈是否为空等:```Stack* create_stack() {Stack* stack = (Stack*) malloc(sizeof(Stack));stack->top = -1;return stack;}int is_empty(Stack* stack) {return stack->top == -1;}void push(Stack* stack, int data) {if (stack->top == MAX_STACK_SIZE - 1) {printf('Error: Stack overflow');return;}stack->top++;stack->data[stack->top] = data;}int pop(Stack* stack) {if (is_empty(stack)) {printf('Error: Stack is empty');return -1;}int data = stack->data[stack->top];stack->top--;return data;}```接下来,实现将十进制数字转化为二进制数字的函数,使用栈来存储每一位的二进制数字:```void decimal_to_binary(int decimal) { Stack* stack = create_stack();while (decimal > 0) {int remainder = decimal % 2;push(stack, remainder);decimal /= 2;}while (!is_empty(stack)) {int binary = pop(stack);printf('%d', binary);}}```最后,测试一下上述代码的运行情况:```int main() {int decimal = 10;decimal_to_binary(decimal);return 0;}```输出结果为:1010,即十进制数字10转化为二进制数字为1010。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/* 十进制数据转化成二进制数据,可选择使用补码或源码*/ /* d_to_b.h */#define data_length 79177#define data_bit 16 //转化成二进制后的数据位宽#define shift_length 3 //移位位宽#define com_code 0 //取1则负数转化为补码#define code ~com_codedouble data_in_i[data_length]; // I路输入的十进制数据寄存器double data_in_q[data_length]; // Q路输入的十进制数据寄存器int data_reg_i[data_length];int data_reg_q[data_length];int binary_i[data_bit]; //存放二进制数据的寄存器int binary_q[data_bit]; //存放二进制数据的寄存器int binary_i_com[data_bit]; //存放二进制补码数据的寄存器int binary_q_com[data_bit]; //存放二进制补码数据的寄存器/* d_to_b.c */#include <stdio.h>#include <math.h>#include "d_to_b.h"/****************************************************************** 十进制转化成二进制,且负数可选择用补码还是源码表示~~~~******************************************************************/int main(){int i;int j, k;/* ----------------------读入数据--------------------- */FILE *fp_in_i, *fp_in_q;fp_in_i = fopen("tx_interp_out_i.txt", "r");fp_in_q = fopen("tx_interp_out_q.txt", "r");for(i = 0; i < data_length; i++){fscanf(fp_in_i, "%lf", &data_in_i[i]);fscanf(fp_in_q, "%lf", &data_in_q[i]);}fclose (fp_in_i);fclose (fp_in_q);/* -------------------------------------------------- */FILE *fp_shift_i, *fp_shift_q;fp_shift_i = fopen("tx_shift_out_i.txt", "w+");fp_shift_q = fopen("tx_shift_out_q.txt", "w+");FILE *fp_out_i, *fp_out_q;fp_out_i = fopen("change_out_i.txt", "w+");fp_out_q = fopen("change_out_q.txt", "w+");/* -------------需要移位的数据先进行移位,即转化成整数,不需要转的,则设置shift_length=0------------ */for(i = 0; i < data_length; i++){data_reg_i[i] = data_in_i[i] * pow(2, shift_length);data_reg_q[i] = data_in_q[i] * pow(2, shift_length);fprintf(fp_shift_i, "%d\n", data_reg_i[i]);fprintf(fp_shift_q, "%d\n", data_reg_q[i]);}/* ----------------------------------------------- *//* ---------------------------十进制化为二进制,负数用补码-------------------------------- */#if com_codefor(i = 0; i < data_length; i++){/* --------------I路正数转化------------- */if(data_reg_i[i] >= 0){binary_i[data_bit - 1] = 0; //符号位为0fprintf(fp_out_i, "%d", binary_i[data_bit - 1]);for(j = 0, k = fabs(data_reg_i[i]); j < data_bit - 1; j++, k = k/2){if(k % 2 == 0)binary_i[j] = 0;elsebinary_i[j] = 1;}for(j = data_bit - 2; j >= 0; j--){fprintf(fp_out_i, "%d", binary_i[j]);}fprintf(fp_out_i, "\n");}/* --------------I路负数转化------------- */else{binary_i[data_bit - 1] = 1; //符号位为1fprintf(fp_out_i, "%d", binary_i[data_bit - 1]);/* ---------------------------以下要按位取反---------------------------- */if( -1 * data_reg_i[i] % 2 == 0 ){binary_i[0] = 0;binary_i_com[0] = 0;}else{binary_i[0] = 1;binary_i_com[0] = 1;}for(j = 1, k = fabs(data_reg_i[i]) / 2; j < data_bit - 1; j++, k = k/2){if(k % 2 == 0 && binary_i[j - 1] == 0 && binary_i_com[j - 1] == 0){binary_i[j] = 0;binary_i_com[j] = 0;}else if(k % 2 == 0 && binary_i[j - 1] == 0 && binary_i_com[j - 1] == 1){binary_i[j] = 0;binary_i_com[j] = 1;}else if(k % 2 == 0 && binary_i[j - 1] == 1 && binary_i_com[j - 1] == 0){binary_i[j] = 1;binary_i_com[j] = 1;}else if(k % 2 == 0 && binary_i[j - 1] == 1 && binary_i_com[j - 1] == 1){binary_i[j] = 1;binary_i_com[j] = 1;}else if(k % 2 == 1 && binary_i[j - 1] == 0 && binary_i_com[j - 1] == 0){binary_i[j] = 1;binary_i_com[j] = 1;}else if(k % 2 == 1 && binary_i[j - 1] == 0 && binary_i_com[j - 1] == 1){binary_i[j] = 1;binary_i_com[j] = 0;}else if(k % 2 == 1 && binary_i[j - 1] == 1 && binary_i_com[j - 1] == 0){binary_i[j] = 1;binary_i_com[j] = 0;}else{binary_i[j] = 1;binary_i_com[j] = 0;}}/* ------------------------------------------------------------------- */for(j = data_bit - 2; j >= 0; j--){fprintf(fp_out_i, "%d", binary_i_com[j]);}fprintf(fp_out_i, "\n");}/* ------------------------------------- *//* --------------Q路正数转化------------- */if(data_reg_q[i] >= 0){binary_q[data_bit - 1] = 0; //符号位为0fprintf(fp_out_q, "%d", binary_q[data_bit - 1]);for(j = 0, k = fabs(data_reg_q[i]); j < data_bit - 1; j++, k = k/2){if(k % 2 == 0)binary_q[j] = 0;elsebinary_q[j] = 1;}for(j = data_bit - 2; j >= 0; j--){fprintf(fp_out_q, "%d", binary_q[j]);}fprintf(fp_out_q, "\n");}/* --------------Q路负数转化------------- */else{binary_q[data_bit - 1] = 1; //符号位为1fprintf(fp_out_q, "%d", binary_q[data_bit - 1]);/* ---------------------------以下要按位取反---------------------------- */if( -1 * data_reg_q[i] % 2 == 0 ){binary_q[0] = 0;binary_q_com[0] = 0;}else{binary_q[0] = 1;binary_q_com[0] = 1;}for(j = 1, k = fabs(data_reg_q[i]) / 2; j < data_bit - 1; j++, k = k/2){if(k % 2 == 0 && binary_q[j - 1] == 0 && binary_q_com[j - 1] == 0){binary_q[j] = 0;binary_q_com[j] = 0;}else if(k % 2 == 0 && binary_q[j - 1] == 0 && binary_q_com[j - 1] == 1){binary_q[j] = 0;binary_q_com[j] = 1;}else if(k % 2 == 0 && binary_q[j - 1] == 1 && binary_q_com[j - 1] == 0){binary_q[j] = 1;binary_q_com[j] = 1;}else if(k % 2 == 0 && binary_q[j - 1] == 1 && binary_q_com[j - 1] == 1){binary_q[j] = 1;binary_q_com[j] = 1;}else if(k % 2 == 1 && binary_q[j - 1] == 0 && binary_q_com[j - 1] == 0){binary_q[j] = 1;binary_q_com[j] = 1;}else if(k % 2 == 1 && binary_q[j - 1] == 0 && binary_q_com[j - 1] == 1){binary_q[j] = 1;binary_q_com[j] = 0;}else if(k % 2 == 1 && binary_q[j - 1] == 1 && binary_q_com[j - 1] == 0){binary_q[j] = 1;binary_q_com[j] = 0;}else{binary_q[j] = 1;binary_q_com[j] = 0;}}/* ------------------------------------------------------------------- */for(j = data_bit - 2; j >= 0; j--){fprintf(fp_out_q, "%d", binary_q_com[j]);}fprintf(fp_out_q, "\n");}/* ------------------------------------- */}/* ----------------------------------------------------------------------------------- */#endif#if code/* ------------------------------十进制转二进制,负数不用补码--------------------------- */ for(i = 0; i < data_length; i++){/* --------------I路转化------------- */if(data_reg_i[i] >= 0){binary_i[data_bit - 1] = 0; //符号位为0fprintf(fp_out_i, "%d", binary_i[data_bit - 1]);}else{binary_i[data_bit - 1] = 1; //符号位为1fprintf(fp_out_i, "%d", binary_i[data_bit - 1]);}for(j = 0, k = fabs(data_reg_i[i]); j < data_bit - 1; j++, k = k/2){if(k % 2 == 0)binary_i[j] = 0;elsebinary_i[j] = 1;}for(j = data_bit - 2; j >= 0; j--){fprintf(fp_out_i, "%d", binary_i[j]);}fprintf(fp_out_i, "\n");/* --------------Q路转化------------- */if(data_reg_q[i] >= 0){binary_q[data_bit - 1] = 0; //符号位为0fprintf(fp_out_q, "%d", binary_q[data_bit - 1]);}else{binary_q[data_bit - 1] = 1; //符号位为1fprintf(fp_out_q, "%d", binary_q[data_bit - 1]);}for(j = 0, k = fabs(data_reg_q[i]); j < data_bit - 1; j++, k = k/2){if(k % 2 == 0)binary_q[j] = 0;elsebinary_q[j] = 1;}for(j = data_bit - 2; j >= 0; j--){fprintf(fp_out_q, "%d", binary_q[j]);}fprintf(fp_out_q, "\n");}/* ----------------------------------------------------------------------------------- */ #endifprintf("change has passed!\n");fclose(fp_shift_i);fclose(fp_shift_q);fclose(fp_out_i);fclose(fp_out_q);return 0;}。

相关文档
最新文档