c语言,那位大神解释一下下面的代码

这个是怎么做到逐一提取每一位的信息的... 这个是怎么做到逐一提取每一位的信息的 展开
 我来答
弈轩
2018-01-19 · 知道合伙人教育行家
弈轩
知道合伙人教育行家
采纳数:1029 获赞数:7545
电子设计大赛三等奖 优秀毕业生

向TA提问 私信TA
展开全部
二进制数学过没?(这是高中数学有学的)
如果学过,应该下面的语句很容易理解。
部分代码如下:
if(buff %2 ==1){ //buff除以2余1
s[i]='1';
}else{ //不出余1那就是余0了
s[i]='0';
}
buff /= 2; //buff自除2

举个例子:若
buff= 10110010; (实际上有32位,这里举8位方便些)
buff %2 得到最低为 0,因为二进制最低位偶数为0,奇数为1。
然后 buff /= 2; 二进制数除以2,那就是整个数字右移一位。
即 01011001。
如有疑问或不明白请提问哦!
更多追问追答
追问
嗯,谢谢。有点清楚了。
那数学运算在计算机里面都是用二进制来计算的吗,那如果不是除2的x次幂 ,比如buff /= 3 要怎么办。
还有为什么这个程序里面要memcpy拷贝一次,不会多此一举吗
追答
现代计算机实际的一切运算都是用二进制!
十进制等其他程序都是靠二进制的运算来转化的
pardream941026
2018-01-19 · TA获得超过8217个赞
知道大有可为答主
回答量:4602
采纳率:89%
帮助的人:1348万
展开全部
利用了10进制转2进制的数学算法:
比如10进制的17,转2进制:

17/2  = 8 ... 1
 8/2  = 4 ... 0
 4/2  = 2 ... 0
 2/2  = 1 ... 0
 1/2  = 0 ... 1
 结果就是倒序的10001。这个例子有点特殊,首尾都是1.顺序是自下而上的。
这个程序就是 按照这个规则写的。自己思考一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式