精华内容
下载资源
问答
  • 题目:将一个无符号整数转换为任意 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进制转换为8进制之类的转换可以借助十进制完成,即先转换为10进制,然后将10进制转换为8进制 可参考 2. 出现的问题 本来想借助函数f2实现将a转换为b进制的数,由于...

    1. 基础知识

    1. 十进制转二进制
      方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除依此步骤继续向下运算直到商为0为止。
      在这里插入图片描述
    2. 十进制转换为其他的进制同理
    3. 2进制转换为8进制之类的转换可以借助十进制完成,即先转换为10进制,然后将10进制转换为8进制
      可参考

    2. 出现的问题

    1. 本来想借助函数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;
    } 
    
    1. 解决办法
      进制转换函数得到的余数存储在整数数组中,转换函数不作操作,主函数输出打印时加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);
    }
    
    展开全文
  • 方法1 java.lang包里integer类下有一个方法toBinaryString public static String toBinaryString(inti) 以二进制(基数 2)无符号整数形式返回...将该值转换为二进制(基数 2)形式的无前导 0 的 ASCII 数字字符...

    方法1

    java.lang包里integer类下有一个方法 toBinaryString

    public static String toBinaryString(int i)
    以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。

    如果参数为负,该无符号整数值为参数加上 232;否则等于该参数。将该值转换为二进制(基数 2)形式的无前导 0 的 ASCII 数字字符串。如果无符号数的大小为零,则用一个零字符 '0' (’\u0030’) 表示它;否则,无符号数大小的表示形式中的第一个字符将不是零字符。字符 '0' ('\u0030') 和 '1' ('\u0031') 被用作二进制数字。  

     例如

    String a = Integer.toBinaryString(7);
    System.out.print(a);
    输出
    111
    源代码

    public static String toBinaryString(int i) {
    return toUnsignedString0(i, 1);
    }

    
    

    /**
    * Convert the integer to an unsigned number.
    */
    private static String toUnsignedString0(int val, int shift) {
    // assert shift > 0 && shift <=5 : "Illegal shift value";
    int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val);//Integer.SIZE=32,Integer.numberOfLeadingZeros是求补码前面的0的个数
    int chars = Math.max(((mag + (shift - 1)) / shift), 1);
    char[] buf = new char[chars];

    
    

    formatUnsignedInt(val, shift, buf, 0, chars);

    
    

    // Use special constructor which takes over "buf".
    return new String(buf, true);
    }

    
    

    /**
    * Format a long (treated as unsigned) into a character buffer.
    * @param val the unsigned int to format
    * @param shift the log2 of the base to format in (4 for hex, 3 for octal, 1 for binary)
    * @param buf the character buffer to write to
    * @param offset the offset in the destination buffer to start at
    * @param len the number of characters to write
    * @return the lowest character location used
    */
    static int formatUnsignedInt(int val, int shift, char[] buf, int offset, int len) {
    int charPos = len;
    int radix = 1 << shift;
    int mask = radix - 1;
    do {
    buf[offset + --charPos] = Integer.digits[val & mask];//前面有一个digits数组
    val >>>= shift;
    } while (val != 0 && charPos > 0);

    
    

    return charPos;
    }

    方法2

    要求转换为n位的二进制数

    int m =7//要转换的数

    int[] a = new int[n];
    for (int i = n-1; i >= 0; i--) {
    if ((m & (1 << i)) != 0) //按位与
    a[i]=1;
    else
    a[i] = 0;

    }



     

    转载于:https://www.cnblogs.com/lxy1998/p/6798550.html

    展开全文
  • 本文实例讲述了PHP实现十进制二进制、八进制和十六进制转换相关函数用法。分享给大家供大家参考,具体如下: ...bindec()将所有的$binary_string值解释为无符号整数。这是因为bindec()函数将其最
  • //假设我这里输入的使“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);
    } 
    在这里插入代码片
    
    展开全文
  • 输入一个二进制整数(大整数大于0,不带符号前导0,至少1位数字,且不超过100位数字)。要求将该整数转换十进制数,并输出。 建议:用字符数组存储大整数
  • 负数二进制转换十进制

    千次阅读 2013-10-14 22:45:46
    题目: 设某单字节整数二进制形式11010011,其分别作为有符号和无符号整数转换十进制的形式 负数 1101 0011 -------(取反码)>1010 1100(末位+1)------->1010 1101
  • 在这种情况下,输入和输出都将被指定有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。...
  • 二进制补码和十进制数的转换

    千次阅读 2020-04-03 23:24:58
    最近做的一个工程项目用到了基本的数据...若符号为是1, 则该数一定是负数, 可按照以下方式转换: 方式一: 先把符号位去掉, 把剩下的非符号位取反后得到一个无符号位的二进制序列, 将该二进制序列转换为十进制整数(注...
  • 十进制转化为二进制

    2021-01-12 18:56:36
    输入1个无符号十进制整数,将其转换二进制,并输出。(10分) 题目内容: 从键盘输入1个小于65536的无符号十进制整数,将其转换成16位二进制,并输出。 具体要求完成的功能如下: 1)如输入负数,则输出 ...
  • 进制转换

    2021-04-20 20:59:33
    注:本文只讨论无符号数间的进制转换十进制转其他进制 使用口诀借P取余 *用整数除以相应的进制数,如:转二进制就除以2,八进制就除以8.*既可把十进制转为其他进制数了。 我以转二进制为例 ,将十进制数43.25转为...
  • %o 格式化无符号八进制%x格式化无符号十六进制%X格式化无符号十六进制(大写)%d格式化整数bin() 函数返回一个整数int或长整数long int 的二进制print()中单独的一个百分号前面‘’里面的都会打印,‘’后面的是对应...
  • Python 进制转换

    2018-12-11 19:26:00
    1). 进制的表示 ...有符号数和无符号数的概念 把二进制数中的最高位(最左边的那位)用作符号位 对于有符号数,最高位被计算机系统规定符号位(0正,1负) +2 &gt;&gt;&gt; 0000 0...
  • //打印无符号整数位 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Java_3 extends JFrame {  public Java_3(){  super( "打印无符号整数位" );  Container c = ...
  • 进制转换和BCD码

    千次阅读 2018-11-01 11:45:56
    整数部分:用十进制数逐次除以2,每次的余数即为二进制的一位数字(从最低位数开始) 小数部分:用十进制小数部分逐次乘以2,每次所得乘积的整数即位二进制的一位数字(从小数点后的第一位开始) (由二到十): ...
  • 输入一个二进制整数(大整数大于0,不带符号前导0,至少1位数字,且不超过100位数字)。要求将该整数转换十进制数,并输出。 建议:用字符数组存储大整数。 求代码
  • 她问了我这样一个问题:Questions:十进制整数75转换为无符号二进制整数,答案前面为啥要多一个零?不是我针对谁,我是说在座的各位..........首先, 在解答这个加0的问题之前,我们需要先把十进制数75转换为二...
  • 190. 颠倒二进制

    2019-05-07 14:53:28
    颠倒给定的 32 位无符号整数...十进制转换为二进制 bin(n) 返回字符串 二进制转换为十进制 int(s, 2) class Solution: # @param n, an integer # @return an integer def reverseBits(self, n): s = bin(n)[2...
  • 如果给定一个十进制整数是 如何转换二进制数的呢?用的是除以2取余数的方法。若余数1,则1的个数加 1;然后用商再除以2取余数,直到商为0;但是负数除2的余数负数。因此,可以 在用 unsigned int 定义一...
  • 首先八位二进制数0000 0000 ~1111 1111,一共可以表示2^8=256位数,如果表示无符号整数可以表示0~255。计算方法就是二进制十进制之间的转换。 如果想要表示有符号整数,就要将最前面一个二进制位作为符号位,即0...
  • 首先八位二进制数0000 0000 ~1111 1111,一共可以表示2^8=256位数,如果表示无符号整数可以表示0~255。计算方法就是二进制十进制之间的转换。 如果想要表示有符号整数,就要将最前面一个二进制位作为符号位,即0...
  • (1)在MATLAB中有一个函数dec2bin,可以把正整数转换为2进制 (2)对于负数有这样一个结论:N位二进制负数X的补码对应的无符号数为2N +X 例:有符号原码:1001 十进制为:-1  反码: 1110  补码:1111 无符号...
  • 输入两个十进制整数a和b,求闭区间 [a ,b] 内有多少个Round number 所谓的Round Number就是把一个十进制转换为一个无符号二进制数,若该二进制数中0的个数大于等于1的个数,则它就是一个Round Number
  • 二进制中1的个数

    2019-01-08 00:09:06
    二进制中1的个数  在《编程之美》一书中有一节提到如何求一个... 在将十进制转换为二进制数时,采用除2取余法。将每次除2得到的余数保存起来逆序输出便是该十进制整数二进制表示。因此可以采用这种方法去统...
  • 正负数的二进制(转)

    千次阅读 2019-05-14 18:16:47
    首先八位二进制数0000 0000 ~1111 1111,一共可以表示2^8=256位数,如果表示无符号整数可以表示0~255。计算方法就是二进制十进制之间的转换。 如果想要表示有符号整数,就要将最前面一个二进制位作为符号位,即0...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 164
精华内容 65
关键字:

十进制转换为无符号二进制整数