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);
展开
 我来答
金色潜鸟
推荐于2018-04-23 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5657万
展开全部
把 用字符串形式 输入的 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。
匿名用户
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是一个道理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
云贺拨哲4T
2014-01-06 · 超过16用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:15.8万
展开全部
打印输入的二进制数据,以字符形式呈现在屏幕上,for后面两个语句应该在花括号内,你少了花括号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ROM__yu
2014-01-06
知道答主
回答量:23
采纳率:0%
帮助的人:12.7万
展开全部
n1=0*2+st2[0]-48;
n2=n1 * 2+st2[1]-48;
n3=n3 * 2+sr2[2]-48;
................
不懂可以继续问.
追问
能不能用中文解释一下。。初学呢。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
C语言爱好者123
2014-01-06
知道答主
回答量:50
采纳率:0%
帮助的人:9.1万
展开全部
这个你都要问才能解决?好心劝你别学了,你会非常累!
追问
真是谢谢- -真抱歉还费了你22个字呢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式