-
无符号十进制整数转换成任意进制数
2015-01-23 12:01:34题目:将一个无符号整数转换为任意 d 进制数( 2 ≤ d ≤ 16 )。 思路:先举个例子。十进制100怎么转换为二进制呢? 记住:d进制的数就是0~(d-1)。 一般都是用辗转相除法(应该是叫这个名字),我比较喜欢这样写,...题目:将一个无符号整数转换为任意 d 进制数( 2 ≤ d ≤ 16 )。
思路:先举个例子。十进制100怎么转换为二进制呢?
记住:d进制的数就是0~(d-1)。
一般都是用辗转相除法(应该是叫这个名字),我比较喜欢这样写,比较直观:
`
这样我们就很清楚地知道是一直在除以2,直至被除数为0。
我们就将余数储存在一个数组里,到时候再将数组逆序输出,则100的二进制数1100100就能得到!
其它进制也一样,不过是除数改变而已。
所以步骤就是:
1.将余数储存在数组里
2.将数组倒置
3.输出数组
下面给出代码:
/* 实现十进制转换任意进制 */ #include <stdio.h> #include <string.h> #define MAX sizeof(unsigned)*8 - 1 /* 将十进制n转换成d进制 */ void trans(unsigned n, int d, char srt[]) { char *a = "0123456789ABCDEF"; int i = 0; while (1) { srt[i++] = a[n%d]; n = n / d; if (n == 0) break; } srt[i] = '\0'; } /* 将转换的数组倒置 */ void reversion(char srt[], char dst[]) { int i = 0; int j, k; j = k = strlen(srt); while (1) { dst[i] = srt[--j]; if (i == k - 1) break; i++; } dst[k] = '\0'; } int main(void) { int n; int d; char srt[MAX]; char dst[MAX]; printf("Please input a nuber:"); scanf("%d", &n); for(d = 2; d <= 16; d++) { trans(n, d, srt); reversion(srt, dst); printf("%5d = %s<%d>\n", n, dst, d); } return 0; }
结果运行如下:虽然这个程序还有很多地方可以优化,但总体思路应该明确了。
值得注意的是:一开始我写出来的时候运行结果却不正确,然后我仔细地看了一下代码才发现原来字符串数组后没有加上'\0'!在C语言里,这是一个必须得留心的问题,而且如果程序很大的话,会很难发现的,所以在这里提个醒。
-
将一个无符号十进制整数转换成(2-16)进制数并输出
2019-03-30 17:41:01十进制转换为其他的进制同理 2进制转换为8进制之类的转换可以借助十进制完成,即先转换为10进制,然后将10进制转换为8进制 可参考 2. 出现的问题 本来想借助函数f2实现将a转换为b进制的数,由于...1. 基础知识
- 十进制转二进制
方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除依此步骤继续向下运算直到商为0为止。
- 十进制转换为其他的进制同理
- 2进制转换为8进制之类的转换可以借助十进制完成,即先转换为10进制,然后将10进制转换为8进制
可参考
2. 出现的问题
- 本来想借助函数f2实现将a转换为b进制的数,由于大于10的进制含有A代表10,B代表11,C代表12,D代表13,E代表14,F代表15,所以想着把数组f定义为字符串数组,但是问题出现在进制转换借助的余数为整数,需要存储确是字符,将小于10的余数直接赋给c时,打印便会异常,so这种方法行不通。
//进制转换 int f2(int a,int b){ //a代表整数,b代表需要转换的进制 int temp,i=0,d; char c; temp = a; while(temp!=0){ d = temp%b; if(d>15) { printf("数据非法!!!"); return 0; } switch(d){ case 10: c = 'A';break; case 11: c = 'B';break; case 12: c = 'C';break; case 13: c = 'D';break; case 14: c = 'E';break; case 15: c = 'F';break; default: c =d;printf("%c\n",c);break;//打印异常 } f[i++] = c; temp = temp/b; } return i; }
- 解决办法
进制转换函数得到的余数存储在整数数组中,转换函数不作操作,主函数输出打印时加switch语句判断进行处理即可
3. 代码
#include <stdio.h> #define max 100 int f[max]; //为了使用方便,定义为全局变量 //进制转换函数 int f2(int a,int b){ //a代表整数,b代表需要转换的进制 int temp,i=0,d; temp = a; while(temp!=0){ f[i++] = temp%b; ; temp = temp/b; } return i; //将转换后的进制个数返回 } int main(){ int a,b,n,i; char c; //用来接收大于9时的字母表示 printf("请输入一个十进制的整数a:"); scanf("%d",&a); printf("请输入需要将其转化为几进制(2-16):"); scanf("%d",&b); //调用进制转换函数 n = f2(a,b); //打印输出转换后的进制 for(i=n-1;i>=0;i--){ switch(f[i]){ case 10: c = 'A';printf("%c ",c);break; case 11: c = 'B';printf("%c ",c);break; case 12: c = 'C';printf("%c ",c);break; case 13: c = 'D';printf("%c ",c);break; case 14: c = 'E';printf("%c ",c);break; case 15: c = 'F';printf("%c ",c);break; default: printf("%d ",f[i]);break; } } return 0; }
4. 考试版
//将一个无符号十进制整数转换成(2-16)进制数并输出 #include "stdio.h" void print(int num,int d) { int a[20]; int n=0,r,i,temp; r=num; while(r!=0) { a[n++]= r%d; r = r/d; } for(i=n-1; i>=0; i--) switch(a[i]) { case 10: printf("A "); break; case 11: printf("B "); break; case 12: printf("C "); break; case 13: printf("D "); break; case 14: printf("E "); break; case 15: printf("F "); break; default: printf("%d ",a[i]); break; } } void main() { int num=17,d=16; // scanf("%d %d",&num,&d); print(num,d); }
- 十进制转二进制
-
MOOC输入1个无符号的十进制整数,将其转换成二进制,并输出。(10分)
2020-06-07 23:51:19从键盘输入1个小于65536的无符号的十进制整数,将其转换成16位二进制,并输出。 具体要求完成的功能如下: 1)如输入负数,则输出 “数据小于0” 2)如超过65535,则输出“超过最大数” 3)输出转换过的16位二进制数...题目内容:
从键盘输入1个小于65536的无符号的十进制整数,将其转换成16位二进制,并输出。
具体要求完成的功能如下:
1)如输入负数,则输出 “数据小于0”
2)如超过65535,则输出“超过最大数”
3)输出转换过的16位二进制数;输入格式:
输入一个小于65536的正整数
输出格式:
二进制数每8位数字后空一格,不足16位补0,行末没有空格。
输入样例:
765
输出样例:
00000010 11111101
时间限制:500ms内存限制:32000kb
#include <stdio.h> int main() { int n , a[16]; scanf( "%d" , &n ) ; if( n < 0 ) printf( "数据小于0\n" ) ; else if( n > 65535 ) printf( "超过最大数" ) ; else { int i ; for( i = 15 ; i >= 0 ; i-- ) a[ i ] = 0 ; i = 15 ; do { a[ i ] = n % 2 ; n /= 2 ; i-- ; } while( n > 0 ) ; for( i = 0 ; i < 8 ; i++ ) printf( "%d" , a[ i ] ) ; printf( " " ) ; for( i = 8 ; i < 16 ; i++ ) printf( "%d" , a[ i ] ) ; printf( "\n" ) ; } return 0 ; }
-
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2020-12-20 02:09:57本文实例讲述了PHP实现十进制、二进制、八进制和十六进制转换相关函数用法。分享给大家供大家参考,具体如下: ...bindec()将所有的$binary_string值解释为无符号整数。这是因为bindec()函数将其最 -
是将无符号八进制数字构成的字符串转换为十进制整数。
2020-06-29 17:11:21//假设我这里输入的使“556” 将会... //转换成响应的8进制数 while(*++p){ //输入“556 ” n=(n*8)+*p-'0'; // 1. n=(5*8)+5 2.n=((5*8)+5)*8+6 5*8二次方+5*8一次方+6 } printf("%d\n",n); } 在这里插入//假设我这里输入的使“556” 将会输出 366 char *p,s[6]; int n; p=s; //p值向数组s的首地址 gets(p); //输入一个字符串 n=*p-'0'; //转换成响应的8进制数 while(*++p){ //输入“556 ” n=(n*8)+*p-'0'; // 1. n=(5*8)+5 2.n=((5*8)+5)*8+6 5*8二次方+5*8一次方+6 } printf("%d\n",n); } 在这里插入代码片
-
负数二进制转换十进制
2013-10-14 22:45:46题目: 设某单字节整数的二进制形式为11010011,其分别作为有符号和无符号整数转换成十进制的形式为 负数 1101 0011 -------(取反码)>1010 1100(末位+1)------->1010 1101 -
二进制大整数转化为十进制数
2019-04-21 22:02:45输入为一个二进制大整数(大整数大于0,不带符号,无前导0,至少1位数字,且不超过100位数字)。要求将该整数转换成十进制数,并输出。 建议:用字符数组存储大整数 -
十进制与R进制之间的转换
2020-07-23 20:42:38数值数据:无符号整数、带符号整数、浮点数(实数) 非数值数据:逻辑数(包括位串)、西文字符和汉字 如果要表示数值数据,就必须确定进位计数制,通常需要将十进制数据转换成其它进制数据,转换方法如下:... -
十进制转化为二进制
2021-01-12 18:56:36输入1个无符号的十进制整数,将其转换成二进制,并输出。(10分) 题目内容: 从键盘输入1个小于65536的无符号的十进制整数,将其转换成16位二进制,并输出。 具体要求完成的功能如下: 1)如输入负数,则输出 ... -
整数转换二进制, 高效使用位运算
2018-11-04 17:08:49对于C语言来说,一个整数在内存里面就是以二进制的形式存储的,所以没有必要再将其经过一系列运算转换成二进制的形式,只要将整数在内存中的二进制表示输出即可。 递归调用方法: // 这里使用无符号数作为形参... -
求二进制转十进制代码
2019-04-22 20:23:49输入为一个二进制大整数(大整数大于0,不带符号,无前导0,至少1位数字,且不超过100位数字)。要求将该整数转换成十进制数,并输出。 建议:用字符数组存储大整数。 求代码 -
LeetCode 405. Convert a Number to Hexadecimal (进制转换,移位运算)
2017-06-01 16:37:17输入一个整数,输出其十六进制表示的字符串。负数使用补码表示。 思路:用十进制的15(二进制的1111)作为掩码,获取最低的4位,直接...在右移位时,注意要转换成无符号整数,这样移位时才能补0,否则将添加符号位。 -
C语言求一个整数的二进制形式表示中1的个数,用函数实现
2017-10-11 22:22:371:我们知道,整数在计算机中是以补码的形式存储的。如果给定一个十进制正整数是 如何转换成二进制数的呢?...因此,可以 在用 unsigned int 定义一个整数,将有符号数转换成无符号数。例如-1的补码 -
二进制处理中的一些技巧
2015-03-29 16:53:001、把十进制数转换成二进制数 (1)在MATLAB中有一个函数dec2bin,可以把正整数转换为2进制 (2)对于负数有这样一个结论:N位二进制负数X的补码对应的无符号数为2N +X 例:有符号原码:1001 十进制为:-1 ... -
为什么unsigned (-1)表示无符号整数的最大值
2019-10-08 05:47:38整数在计算机中的表示 在计算机中,整数采用补码表示。当前主流编译器中整型在内存中占用四个...比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。那么-1,就是10... -
Python—IP地址与整数之间的转换
2018-06-20 18:11:00思路:将整数转换成无符号32位的二进制,再8位进行分割,每8位转换成十进制即可。 方法一:#!usr/bin/python 2 #encoding=utf-8 3 #1. 将整数转换成32位无符号二进制 4 def intToIp(num): 5 s = [] 6 g... -
信息的表示和存储
2020-12-30 21:15:07信息的表示和存储预备知识进制转换练习文本信息在计算机中的表示无符号数和有符号数数的定点表示和浮点表示浮点四则运算 预备知识 进制转换 Binary二进制 Dec十进制 Oct八进制 Hex十六进制 非十进制转换为十进制 把... -
整数表示总结
2019-05-27 17:40:04整数的表示与运算 表示:有符号数(signed)与无符号数(unsigned) ...有符号转换成无符号即重新读机器数为真值。 正负数表示: 写负数时,先写出对应相反数,然后按位取反再加1 十进制 十六进制 二进制 ... -
7.整数反转
2021-04-12 15:46:38给你一个 32 位的有符号...对于这题,注意的是我们的32位是十进制的表示,对于二进制来说,三十二位是二进制的,所以需要判断是否溢出了、 对于这种大整数,我最先想到的就是先转换成字符串,再转成数字。 对于数字转字 -
整数表示
2008-03-03 17:57:00一、无符号和二进制补码编码 假设有一个W位的二进制位串, 表示中间的每一位,记作向量 ,把 看做一个写成...我们用一个函数 (代表“二进制数到无符号数的转换”)来表示这种形式: (注:此公式可以推广到十进制,把 -
数制互相转换的源程序1
2004-07-13 14:46:00从十进制数到二进制数的转换作 者:winfox发表于:2004-3-24 从十进制数到二进制数的转换 // by Lynxcn version 1.0// 转载请保留文章的完整性// 本文只研究将无符号整数转换成二进制数 一、算法1.除法用十进制整数... -
字符串转换数值函数:_tcstoul()与_tcstol()的区别!
2009-09-26 22:32:00_tcstoul()或者_tcstol(),它们都能把字符串转化成任意进制的长整数(如二进制、八进制、十进制或十六进制),不同点在于前者转化后的数据是无符号的(unsigned),而后者相反。 -
Java的二元操作符
2019-06-18 15:23:43文章目录必读:二进制的转换必读:原码,反码,补码(负整数如何转成二制制)左移(<<)右移(>>)无符号右移(>>>)位与( & )位或( | )位异或( ^ ) 必读:二进制的转换 二进制 → 十进制 将二进制的... -
JavaScript的位运算,右移0位的作用
2020-06-17 02:02:04碰到一段代码,代码的功能是将十进制的-5转换成无符号二进制的格式。 对将dec右移0位这句不太懂 <script> document.getElementById("demo").innerHTML = dec2bin(-5); function dec2bin(dec){ return (dec... -
C语言类
2019-12-16 15:48:34二进制大整数转为10进制题目描述:输入样例:...要求将该整数转换成十进制数,并输出。 建议:用字符数组存储大整数。 输入样例: 1001001100101100000001011010010 输出样例: 1234567890 代码: #include<std... -
第四十五章:数据的存储
2021-03-29 11:10:21类型决定看待内存的视角 整型 构造类型+指针类型+空类型 这里是c规定如果没有规定形参,那么可...这里也死循环了(256被转换成一个二进制数又被翻译成一个【0-255之内的数】) 不同数据类型存取方式不一样 ... -
计算机组成原理之原码表示法
2020-10-03 09:38:36eg:将无符号数保存在8位的寄存器中,此时无符号数的二进制表示范围是00000000~11111111,转换成十进制是0 ~ 255。 有符号数 有符号数分为数值和符号两部分。 机器数与真值 真值:带符号的数 机器数:符号数字化的... -
华为优招:电报中用点(.)表示1,用中划线(-)表示0,序列中间用#号分隔;
2017-07-06 22:27:47把形如“–.”的无符号二进制转换成十进制数字后,有张图表,根据这张图表上的映射关系,输出相应的英文字符(编程的时候要苦逼的把这张表手工输入到map里有没有。。。)。如果输入只是一连串的#,则输出一个空字符...
收藏数
78
精华内容
31