C语言:n=n*2+st2[i]-48 这句话什么意思?
全部文件如下:inti,n;charst2[50];n=0;printf("输入一个二进制数:\n");gets(st2);for(i=0;st2[i]!=0;i++)n...
全部文件如下:
int i,n; char st2[50]; n=0; printf("输入一个二进制数:\n"); gets(st2); for(i=0;st2[i]!=0;i++) n=n*2+st2[i]-48; printf("%d\n",n); 展开
int i,n; char st2[50]; n=0; printf("输入一个二进制数:\n"); gets(st2); for(i=0;st2[i]!=0;i++) n=n*2+st2[i]-48; printf("%d\n",n); 展开
5个回答
展开全部
把 用字符串形式 输入的 2进制数, 化成10进制数值, 并按 10 进制 输出。
n=n*2+st2[i]-48; 可以看成 n=n*2+ (st2[i]-48);
st2[i]-48 就是把 str2[i] 这个字符 的 ASCII 码值,化成 算术值。
因为 字符 '0' 的编码 是 48, 字符 '1' 的编码 是 49,
st2[i]-48 就变成了 0 或 1, 看你 输入的 某位上的 字符 是 '0' 还是 '1'。
n*2 就是 把 数值 n 乘 2。
for(i=0;st2[i]!=0;i++) 里的 !0 就是 一个字符一个字符地处理,直到遇见 字符串结束符。
例如输入 111。
i=0; st2[i]=='1'; n = '1'-48 = 1;
i=1; st2[i]=='1'; n = 1 * 2 + ('1'-48) = 2+ 1 = 3;
i=2; st2[i]=='1'; n = 3 * 2 + ('1'-48) = 6+ 1 = 7;
printf("%d\n",n); 输出 7。
n=n*2+st2[i]-48; 可以看成 n=n*2+ (st2[i]-48);
st2[i]-48 就是把 str2[i] 这个字符 的 ASCII 码值,化成 算术值。
因为 字符 '0' 的编码 是 48, 字符 '1' 的编码 是 49,
st2[i]-48 就变成了 0 或 1, 看你 输入的 某位上的 字符 是 '0' 还是 '1'。
n*2 就是 把 数值 n 乘 2。
for(i=0;st2[i]!=0;i++) 里的 !0 就是 一个字符一个字符地处理,直到遇见 字符串结束符。
例如输入 111。
i=0; st2[i]=='1'; n = '1'-48 = 1;
i=1; st2[i]=='1'; n = 1 * 2 + ('1'-48) = 2+ 1 = 3;
i=2; st2[i]=='1'; n = 3 * 2 + ('1'-48) = 6+ 1 = 7;
printf("%d\n",n); 输出 7。
2014-01-06
展开全部
gets(st2)是读取一个字符串,也就是你输入的二进制数其实是一个字符串,比如读入111
那么s[0]='1',s[2]='1',s[3]='1',s[4]='\0';for(i=0;st2[i]!=0;i++)判断st2[i]是否为'\0',不是的话就把这个字符转换成数值,48就是0的ascii码,n*2就是移位,和十进制的*10是一个道理
那么s[0]='1',s[2]='1',s[3]='1',s[4]='\0';for(i=0;st2[i]!=0;i++)判断st2[i]是否为'\0',不是的话就把这个字符转换成数值,48就是0的ascii码,n*2就是移位,和十进制的*10是一个道理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
打印输入的二进制数据,以字符形式呈现在屏幕上,for后面两个语句应该在花括号内,你少了花括号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
n1=0*2+st2[0]-48;
n2=n1 * 2+st2[1]-48;
n3=n3 * 2+sr2[2]-48;
................
不懂可以继续问.
n2=n1 * 2+st2[1]-48;
n3=n3 * 2+sr2[2]-48;
................
不懂可以继续问.
追问
能不能用中文解释一下。。初学呢。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个你都要问才能解决?好心劝你别学了,你会非常累!
追问
真是谢谢- -真抱歉还费了你22个字呢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询