c语言二进制转c语言十进制转八进制,我的哪里错了?

C语言 为什么我的将一个十进制数转化成二进制,一涉及到小数会陷入死循环。代码哪里出错了!
C语言 为什么我的将一个十进制数转化成二进制,一涉及到小数会陷入死循环。代码哪里出错了!
#include&stdio.h& int main() {
double n,s2;
int s1,i,t,b[100];
int zh(int x);
while(scanf(&%lf&,&n)!=EOF)
s1=(int)n;
s2=n-(int)n;
if(s2==0){
printf(&\n&);
printf(&.&);
while(s2){
b[t++]=(int)s2;
for(i=1;i&=t;t++)
printf(&%d&,b[i]);
printf(&\n&);
int zh(int x)
int k=0,a[100],i;
for(i=k;i&=1;i--)
printf(&%d&,a[i]);
if(s2&=1) s2=s2-1;这个逻辑对小数来说不行。一般来说,陷入死循环,都是因为缺少跳出循环的条件。
相关知识等待您来回答
电脑常识领域专家 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
单片机C语言中将二进制数转化为十进制的办法 PDF
下载积分:300
内容提示:
文档格式:PDF|
浏览次数:204|
上传日期: 06:59:34|
文档星级:
该用户还上传了这些文档
下载文档:单片机C语言中将二进制数转化为十进制的办法 PDF.PDF
官方公共微信在C语言中有没有二进制的表示方法?|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
&&&& 对于51单片机,很多时候都是控制某个特殊寄存器的某一位,但是很多特殊的寄存器不能按位寻址,只能用“与”“或”方法对某位单独操作。&&& 看了下C语言,如象没有表示二制进数的方法。只有10进制和16进制的。要是16进制,用0x**来表示,10进制直接用数字。但是二进制比较直观。要是16进还要自己用计算器转一次才能看明白。如:&&&&&& AUXR1 |= 0x04;&&&&&&&&&&&&&&&&& //, 令 ADRJ=1&&& ADC_CONTR |= 0x80;&&&&&&&&&&&&& // 打开 A/D 转换电源如果能用2进制写:&& AUXR1 |=& b;&&&&&&&&&&&&& //令 ADRJ=1&&& ADC_CONTR |=& && //打开 A/D 转换电源不是很直接吗?本人菜鸟,找遍了教材都找不到C的二进制数的表示方法,在此想问坛子里的大侠们,知道这个问题没有?
赞助商链接
0x80 = 0b 用0x表示16进制,,,用0b表示2进制....这样写对不??
试试这个,把这个文件解压后放到& *\Keil\C51\INC ”里,用的时候在头文件区加上一句& #include&binary_code.h& &然后需要调用数值的话就可以写二进制了,格式如下: P1=B; //等同于&P1=0x55;”
引用第1楼水之心于 16:37发表的&&:0x80 = 0b 用0x表示16进制,,,用0b表示2进制....这样写对不??....... 这样写在Keil里通不过编译的~~
用汇编的飘过
Binary_Code(8位二进制对应十六进制的头文件)为什么不能下在起呢??
c语言中不接受二进制吧,其实用8420码来转换很简单,我非常喜欢这个。
楼主高手哦 谢谢哦
可以的哦。我记得我学流水灯的时候 这样写过&&灯接p0口&&void main(){&&&&while(1)&&{&&&&&& P0=;&&&&}}好像也亮了哦,
是亮了。。。十进制的1 和二进制的1相等啊。。。
他不是问可不可以用二进制数显示吗。
可是这样子还是用十进制来表示的啊。
我灯接P1口 然后写的P1=,结果亮了2、7、8三盏灯。。。困惑啊。。。 PS:我也是小菜鸟一只。。。
感觉2楼的比较给力,那个LZ试了没有,
C语言中有个结构叫做&位域&. 举例如下:struct BIT_FIELD{&&&&int&&bit0:1;&&&&int&&bit1:1;&&&&int&&bit2:1;&&&&int&&bit3:1;&&&&int&&bit4:1;&&&&int&&bit5:1;&&&&int&&bit6:1;&&&&int&&bit7:1;};struct BIT_FIELD DData = P&&&&&&// 读取port的值Data.bit0 = 1;&&// bit0置1Port = D&&&&// 写回port
写个宏完美解决~
16进制这个麻烦呀不如111直观
把二进制每四位分一组比如:分成两组1011是11也就是B,0110是6转换成十六进制就是B6
那个不是十进制的说~C语言中0开头是8进制LZ应该熟悉熟悉HEX和BIN的转换,熟练了转换用不了三秒钟,就用BCD码
编译器把你的当十进制处理,估计数据还溢出了,然后就出来个这结果……这应该直接赋值0xFD
&&&& 麻烦您把这个:Binary_Code(8位二进制对应十六进制的头文件).rar发到我的邮箱里:.谢谢
有个头文件里有二进制,可以看一下头文件的详细说明
看看那个转化的
不是可以写p1.0 = 1;p1.1 = 0;这样子写么?
c51中没有二进制写法.
承蒙二楼老鸟开示,不胜感激
把二进制数每四位分成一组 , 四位 分别&&代表 8 4 21&& 前后相加 即得16进制&&例如 &&&&8+4+2=14(十四就是E)&&so&& =EE 11 1001&&&&=8+2+1 (b)&& 8+4+1 (d)&&8+4+2+1(f)&& 8+1(9) =BDF9
试了没有了
建议楼主学下8421码,很简单的
有个结构叫做&位域&. ,
8421码分分钟转换 习惯了就好了
查看完整版本: [--
Powered by
Time 1.817085 second(s),query:5 Gzip enabled数据结构C语言将一个十进制数转换成另外一个P进制数字符串(可以是二进制到十六进制)
将一个十进制数转换成另外一个P进制数字符串(可以是二进制到十六进制)。
转换函数的原型为: void Convert (int n,& char str[],
unsigned P); n:输入,待转换的数 str:输出,转换好的P进制字符串
P:输入,要转换的进制,取值可从2到16。如果在这范围之外,可认为输入错,不做转换。
将一个整数转换成P进制的数,我们可以采用如下的方法: 例:十进制转换成八进制(P等于8):(66)10=(102)8 66/8=8 余
2 8/8 =1 余 0 1/8 =0 余 1 当商为0时转换结束,转换结果为上述过程余数序列的逆序:102。
先求得的余数在写出结果时最后写出,最后求出的余数最先写出,符合栈的LIFO性质,故可用栈来实现数&
#define maxsize 100
typedef struct {& char
data[maxsize];&
}sqstack,*S
Stack initstack() {&
s=(Stack)malloc(sizeof(sqstack));&
s-&top=-1;&
int push(Stack s,char ch)
if(s-&top&=maxsize)&&
return 0;&
s-&data[++s-&top]=&&
return 1;&
int pop(Stack s,char *ch)
& if(s-&top==-1)
&& return 0;
*ch=s-&data[s-&top--];
&& return 1;
&void Convert (int n, char str[], unsigned
p)//十进制数据n向p进制转换
& int i=0;
& s=initstack();
& while(n)
if(n%p&10)
push(s,n%p+'0');
push(s,n%p+'A'-10);
&while(s-&top!=-1)&&
&pop(s,&str[i++]);
& str[i]='\0';
void main()
char str[maxsize];
& printf("请输入数据n\n");
& scanf("%d",&n);
& printf("请输入数据p\n");
& scanf("%d",&p);
& Convert(n,str,p);
& printf("%s\n",str);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。c语言十进制转二进制算法问题_百度知道
c语言十进制转二进制算法问题
} printf(&;void main(){
b=b&#47,&b); scanf(&
a[c]=i;%d&%d&c--) {
printf(&quot!=0) {
for(;2,a[c]),a[30],c=0;).h&gt#include &\}为什么我输入10但他输出-0后面四个数是10的二进制,i;
while(b;n&quot
是十进制转二进制打错了
提问者采纳
} printf(&;void main(){
b=b&#47,&b); scanf(&
a[c]=i;%d&%d&c--) {
printf(&quot!=0) {
for(;2,a[c-1]),a[30],c=0;).h&gt#include &\}这回对了 ,i;
while(b;n&quot
提问者评价
谢谢,第一个while循环
其他类似问题
6人觉得有用
十进制转二进制的相关知识
按默认排序
其他3条回答
;,a[c]);c--) {
printf(&void main(){ 2; while(b; scanf(&
c++;%d&=0;c&
a[c]=i;因为c代表存入数据的长度而下表范围是0~c-1 for(;
b=b&#47,&b);// } c--;%d&quot,a[30],c=0;n&quot.h&gt#include & } printf(&),i!=0) {
i=b%2;&#92
#include &stdio.h&void main(){
int b,i,c=0,a[30]; scanf(&%d&,&b);
while(b!=0) {
for(j=c-1;j&=0;j--) {
printf(&%d&,a[j]); } printf(&\n&);}
输出有问题,那个c现在的值已经越界了,应该从c-1开始输出的
您可能关注的推广回答者:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言 二进制 的文章

 

随机推荐