5.0 32位二进制 转十进制怎么表示 用32位

欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 7535 人关注过本帖
标题:编写C递归函数,将给定的十进制整数,转换为该数值的二进制表示(32位)
等 级:新手上路
帖 子:13
结帖率:100%
&&问题点数:0&&回复次数:6&&&
编写C递归函数,将给定的十进制整数,转换为该数值的二进制表示(32位)
搜索更多相关主题的帖子:
来 自:福建
等 级:论坛游侠
帖 子:174
专家分:186
#include&stdio.h&
long int change(long int n,long int sum)
{long int a,d,b=1,i;
if(n==1) return(sum+1);
{for(a=2,i=1;2*a&=n;a=2*a,i++);
&&&&&for(d=1;d&=i;d++) b=b*10;
&&&&&sum=sum+b;
&&&&&if(a==n)
&&&&&&&&&return(sum);
&&&&&{b=1;change((n-a),sum);}
void main()
{printf(&输入一个10进制的数字,请别太大 因为该算法局限有被long int局限\n&);
long int n,
scanf(&%d&,&n);
sum=change(n,0);
printf(&输出的二进制是%d\n&,sum);
我这个代码就是用递归转化成二进制的 但是我用的不是用比如&&10转化二进制 用 10/2的余数的 来求 我是用最基本的2=10(二进制) 所以只能求到1000多十进制
没病的人说有病的人有病,有病的人说没病的人有病。到底是谁有病?
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
回复 楼主 billjyc
写了个,你看下有什么缺点。
#include &stdio.h&
int main (void)
&&& int&&n, i,
&&& int a[32] = { 0 }, b[32] = { 0 },k = 0;
&&& while (888)
&&& printf(&\n请输入一个十进制整数:&);
&&& scanf(&%d&, &n);
&&& while (n&&&
&&&&&&&&printf(&\n越界,请重新输入:&);&&&&&// 奇怪越界的数无法拦截,直接变成负数处理?
&&&&&&&&scanf(&%d&, &n);
&&& if (n == 0)
&&&&&&&&printf(&\n0的原码和补码都是:&&&);
&&&&&&&&for (i = 31; i &= 0; i--)
&&&&&&&&{&&
&&&&&&&&&&&&if(i == 23 || i == 15 || i == 7)
&&&&&&&&&&&&printf(& &);
&&&&&&&&&&&&printf(&%d&, a[i]);
&&&&&&&&printf(&\n&);
&&&else&&if (n & 0)
&&&&&&&&while (n != 0)
&&&&&&&&&&&& r = n % 2;
&&&&&&&&&&&&b[k++] =
&&&&&&&&&&&&n = n / 2;
&&&&&&&&printf(&\n正整数n的原码是:&&&&&&);
&&&&&&&&for (i = 31; i &= 0; i-- )
&&&&&&&&&&&&if(i == 23 || i == 15 || i == 7)
&&&&&&&&&&&&printf(& &);
&&&&&&&&&&&&printf(&%d&, b[i]);
&&&&&&&&printf(&\n&);
&&& else if(n & 0)
&&&&&&&&printf(&\n负数用补码表示:&);
&&&&&&&&n = -n;
&&&&&&&&& while (n != 0)
&&&&&&&&& {
&&&&&&&&&&&& r =&&n % 2;
&&&&&&&&&&&&b[k++] =
&&&&&&&&&&&&n =&&n / 2;
&&&&&&&&& }
&&&&&&&&for (i = 31; i &= 0; i--)&&a[i] = 1;
&&&&&&&&for (i = 31; i &= 0; i--)&&a[i] = a[i] - b[i];
&&&&&&&&for (i = 0; a[i] == 1; i++)&&
&&&&&&&&& {
&&&&&&&&&&&&a[i] = 0;
&&&&&&&&& }
&&&&&&&&&&&&a[i] = 1;
&&&&&&&&printf(&\n负整数n的补码表示是:&&&&);
&&&&&&&&for (i = 31; i &= 0; i--)
&&&&&&&&&&&&if(i == 23 || i == 15 || i == 7)
&&&&&&&&&&&&printf(& &);
&&&&&&&&&&&&printf(&%d&, a[i]);
&&&&&&&&printf(&\n&);
&&&&&return&&0;
[ 本帖最后由 有容就大 于
19:35 编辑 ]
                                                       
等 级:贵宾
威 望:103
帖 子:3280
专家分:12654
都有点长,用不着那么复杂程序代码:#include&stdio.h&
void output(unsigned int n)
&&&&&&&&output(n && <font color=#);
&&&&&&&&putchar('<font color=#' + (n & <font color=#));
int main()
&&& scanf(&%d&, &n);
&&& if(n) output(n); else putchar('<font color=#');
&&& return <font color=#;
重剑无锋,大巧不工
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
回复 4楼 beyondyf
位运算?具体怎么玩?不解释下搞不懂呢。
                                                       
等 级:新手上路
帖 子:13
回复 4楼 beyondyf
怎么把二进制数编程32位输出啊?
等 级:新手上路
帖 子:13
回复 4楼 beyondyf
如果非要用递归呢,这段代码有什么问题
&#include&stdio.h&
void TenToBi(int a,int i);
int main(){
&&&int b,i=0;
&&printf(&please input the number you want to transform:\n&);
&&&scanf(&%d&,&b);
&&TenToBi(b,i);
void TenToBi(int b,int i){
&&&int d,e,sb[32]={0};
&&if(i&=31){
&&&&&d=b/2;
&&&&&e=b%2;
&&&&&sb[i]=e;
&&&&&TenToBi(d,i);
&&&&&for(i=31;i&=0;i--)
&&&&&& printf(&%d&,sb[i]);
版权所有,并保留所有权利。
Powered by , Processed in 0.059368 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
用32位二进制补码表示带符号的十进制整数的范围是
扫二维码下载作业帮
1.75亿学生的选择
因为十进制带符号,所以有一位符号位,数值范围是31位最大正整数=2^32-1最大负整数=-(2^32-1)所以它的范围是-(2^32-1)到 2^32-12^31是它的最大位表示的数,最大整数是31位全为1,所以是2^32-1
为您推荐:
其他类似问题
扫描下载二维码【编程之美】任意给定一个32位无符号整数n,求n的二进制表示中1的个数
【编程之美】任意给定一个32位无符号整数n,求n的二进制表示中1的个数
发布时间: 16:06:01
编辑:www.fx114.net
本篇文章主要介绍了"【编程之美】任意给定一个32位无符号整数n,求n的二进制表示中1的个数",主要涉及到【编程之美】任意给定一个32位无符号整数n,求n的二进制表示中1的个数方面的内容,对于【编程之美】任意给定一个32位无符号整数n,求n的二进制表示中1的个数感兴趣的同学可以参考一下。
任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4。这也是一道比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,我今天就遇到了,当时懵了。现在想想多简单,浪费了一次机会。
相当于向右移出来一个,计数器加一个。
这种方法最简单,就是通过移位&#43;计数。首先把n于1相&,如果结果==1,说明最后一位是1,计数器&#43;1;然后右移一位,最后一位就没有了,前面用0填充,在进行&操作。循环。这种方法的运算次数与输入n最高位1的位置有关,最多循环32次。
相当于从最右边的1开始,清除一个1,计数器加1.
至于怎么清除通过n与n-1相&,eg.7(0),那么7的最右边的1就清除了。
这种方法速度比较快,其运算次数与输入n的大小无关,只与n中1的个数有关。如果n的二进制表示中有k个1,那么这个方法只需要循环k次即可。其原理是不断清除n的二进制表示中最右边的1,同时累加计数器,直至n为0,代码如下
3.静态表_8bit
对于32位的数要分成四组 8,8,8,8的。 8位无符号数表示范围0-255这256个数,创建一个table数组,盛放这256个数的1的个数,下表即该数。第一组,直接n & 0xff就能得到1所在的位置。取得最低位的8bit,累加后继续移位,第二组要把n向右移8位,再与0xff相&即可。第三组把n向右移16位,再与0xff相&即可。第四组把n向右移24位,再与0xff相&即可。如此往复,直到n为0。
所以对于任意一个32位整数,需要查表4次。以十进制数为例,其对应的二进制数为,对应的四次查表过程如下:红色表示当前8bit,绿色表示右移后高位补零。
第一次(n & 0xff)&&&&&&&&&&&&&
第二次((n && 8) & 0xff)&&1101
第三次((n && 16) & 0xff)0000
第四次((n && 24) & 0xff)
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:}

我要回帖

更多关于 excel 32位 二进制数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信