帮我解析一段C语言代码的原理

《狂人c》里面的代码,将10进制整数以2进制输出。问题有:1.为什么一个整数除以这个0x80000000(8进制,10进制为-2147483648,-2的31次方,64位... 《狂人c》里面的代码,将10进制整数以2进制输出。问题有:1.为什么一个整数除以这个0x80000000(8进制,10进制为-2147483648,-2的31次方,64位的最小int类型整数,这些我都懂了,2进制,8进制都学过了)就会输出它的二进制单个位数。2.为什么每输出一位就要用n%-2的31次方,并且-2的31次方要除以2? 展开
 我来答
itunes0004
2018-04-25 · TA获得超过4045个赞
知道大有可为答主
回答量:2685
采纳率:69%
帮助的人:519万
展开全部

这里有一个基本假设:int 假定是32位,虽然常见的都是32位,但其实我们说整形,可以有16位,32位,64位,甚至无穷位。

为了方便讨论起见,我们 把 int 认为是 8 位 二进制 无符号数。(32位讨论自己类推)

那么 

位 __8  _7  _6  _5  4  3  2  1  (对应位置一时表示的值如下)
值 256  64  32  16  8  4  2  1

我们知道八位二进制整数的表示范围 0 到 511。

所以 如果某个数 X⑧ 第八位是1,那么 这个数必定大于等于 256 = (2^7) = 2^(8-1) 【自己类比32位数】。因此如果 数 X⑧ / 256 的结果(0或者1)就可以表示第八位是0还是1。【也就得到了 X 的第八位】

接下来把 X⑧ 对 256 取模,变成一个 7 位 二进制数了, X⑦ = X⑧  % 256, (X⑦的第八位必定是0,取模256这个操作完整的保留了 X⑧  的 低七位到 X⑦中)。因此取X⑦的第七位是0还是1就依照  X⑦ / 128  【也就得到了 X⑧ 的第七位】

X⑥ = X⑦ % 128 的第六位  X⑥/64【也就得到了 X⑧ 的第六位】

X⑤ = X⑥ %64 的第五位  X⑥/32【也就得到了 X⑧ 的第五位】

。。。。。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式