为什么我QQ被发不了我要发信息网?可是好像禁言了,但是没显示

【补码】关于2的补码_牛宝宝文章网|【补码】关于2的补码专题:问1个基本的问题。负数在计算机中如何表示?举例来说,+8在计算机中表示为二进制的1000,那么-8怎么表示呢?很容易想到,可以将1个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,在8位机中,规定每个字节的最高位为符号位。那么,+8就是,而-8则是。但是,随便找一本《计算机原理》,都会告诉你,实际上,计算机内部采用2的补码(Two's Complement)表示负数。什么是2的补码?它是1种数值的转换方法,要分二步完成:第1步,每1个二进制位都取相反值,0变成1,1变成0。比如,的相反值就是。第二步,将上1步得到的值加1。就变成。所以,的补码就是。也就是说,-8在计算机(8位机)中就是用表示。不知道你怎么看,反正我觉得很奇怪,为什么要采用这么麻烦的方式表示负数,更直觉的方式难道不好吗?昨天,我在一本书里又看到了这个问题,然后就花了一点时间到网上找资料,现在总算彻底搞明白了。2的补码的好处首先,要明确一点。计算机内部用什么方式表示负数,其实是无所谓的。只要能够保持一一对应的关系,即可用任意方式表示负数。所以,既然可以任意选择,那么理应选择1种最方便的方式。2的补码就是最方便的方式。它的便利体现在,所有的加法运算可以使用同1种电路完成。还是以-8作为例子。假定有2种表示方法。1种是直觉表示法,即;另1种是2的补码表示法,即。请问哪1种表示法在加法运算中更方便?随便写1个计算式,16 + (-8) = ?16的二进制表示是 ,所以用直觉表示法,加法就要写成: 00010000+10001000--------- 10011000可以看到,如果按照正常的加法规则,就会得到的结果,转成十进制就是-24。显然,这是错误的答案。也就是说,在这种情况下,正常的加法规则不适用于正数与负数的加法,因此必须制定两套运算规则,一套用于正数加正数,还有一套用于正数加负数。从电路上说,就是必须为加法运算做2种电路。现在,再来看2的补码表示法。 00010000+11111000---------100001000可以看到,按照正常的加法规则,得到的结果是。注意,这是1个9位的二进制数。我们已经假定这是一台8位机,因此最高的第9位是1个溢出位,会被自动舍去。所以,结果就变成了,转成十进制正好是8,也就是16+ (-8)的正确答案。这说明了,2的补码表示法可以将加法运算规则,扩展到整个整数集,从而用一套电路即可实现全部整数的加法。2的补码的本质在回答2的补码为什么能正确实现加法运算之前,我们先看看它的本质,也就是那2个步骤的转换方法是怎么来的。要将正数转成对应的负数,其实只要用0减去这个数即可了。比如,-8其实就是0-8。已知8的二进制是,-8即可用下面的式子求出: 00000000-00001000---------因为(被减数)小于0000100(减数),所以不够减。请回忆一下小学算术,如果被减数的某一位小于减数,我们怎么办?很简单,问上一位借1即可了。所以,0000000也问上一位借了1,也就是说,被减数其实是,算式也就改写成:100000000-00001000--------- 11111000进1步观察,可以发现 =
+ 1,所以上面的式子可以拆成2个: 11111111-00001000--------- 11110111+00000001--------- 111110002的补码的2个转换步骤就是这么来的。为什么正数加法适用于2的补码?实际上,我们要证明的是,X-Y或X+(-Y)可以用X加上Y的2的补码完成。Y的2的补码等于(-Y)+1。所以,X加上Y的2的补码,就等于:X + (-Y) + 1我们假定这个算式的结果等于Z,即 Z = X + (-Y) + 1接下来,分成2种情况讨论。第1种情况,如果X小于Y,那么Z是1个负数。这时,我们就对Z采用2的补码的逆运算,求出它对应的正数绝对值,再在前面加上负号就行了。所以,Z = -[-(Z-1)] = -[-(X + (-Y) + 1-1)] = X- Y第二种情况,如果X大于Y,这意味着Z肯定大于,但是我们规定了这是8位机,最高的第9位是溢出位,必须被舍去,这相当于减去。所以,Z = Z -
= X + (-Y) + 1 -
= X - Y这就证明了,在正常的加法规则下,可以利用2的补码得到正数与负数相加的正确结果。换言之,计算机只要部署加法电路和补码电路,即可完成所有整数的加法。(原文完)读记:当我看到上面最后那段证明正数加法适用于2的补码之际,我产生了1个疑问:作者是怎么想到要从2种情况来进行讨论的呢?不分情况讨论不行吗?我的想法比较单纯:直接将Z写成:Z = X + (-Y) + 1 = X- Y +( + 1) = X - Y + ;因为我们假定是在八位机上完成这次补码加法计算,那么如果第九位为1的话,肯定要被丢弃的,实际上计算机的结果是将纸面得到的X-Y+的结果上减去,则最后结果是 Z = X - Y +
= X -Y。至此,便完成了全部的证明。不过,原文作者的证明给我了一些启示:证明从2种不同的情况,用了2种不同的处理方法来求得同1个结果Z=X-Y。可见Z是恒等于X-Y的,并不取决于我们对X-Y结果是正是负的判断。也就是说,正与负已经被统一起来了,不必再区分,也不能区分。我们学谭浩强的C语言程序设计之际,书中说正数的补码就是原码,负数的补码如前所述处理。统一格式的好处是能够简化硬件电路的实现(因为加减法统一),但如果没有给数字添加符号位,就无从知晓到底1个数是正数还是负数。进1步的问题是,即使我们给预留了符号位,但是如文中所述,符号位并没有参与计算过程,那么得到的结果是正数还是负[WwW.Niubb.net]数,我们又是如何得知呢?转载请保留本文连接:1分享到:相关文章声明:《【补码】关于2的补码》由“真情or假意”分享发布,如因用户分享而无意侵犯到您的合法权益,请联系我们删除。TA的分享java用补码表示负数
java用补码表示负数
发布时间: 19:44:03
编辑:www.fx114.net
本篇文章主要介绍了"java用补码表示负数",主要涉及到java用补码表示负数方面的内容,对于java用补码表示负数感兴趣的同学可以参考一下。
&&&&&&& 所有的整数类型(除了char类型外)都是有符号的整数。他们既能表示正数,又能表示负数。Java用2的补码(two's complement)这种编码来表示负数。2的补码是把一个值的所有位取反(即将1变成0,将0变成1),然后对其结果加1。例如,-42就是通过取反42中所有的位来表示,得到,然后再加1,得到,即-42 。要解码一个负数,首先取反其所有的位,然后加1。例如-42,或取反后为,或41,然后加1,这样就得到了42。
&&&&&& Java和其他计算机语言使用2的补码的原因是什么?考虑一下0的交叉(zero crossing)问题,就会很容易明白这一点。假定有一个byte型值,0用代表。在补码表示中,只是取反所有的位,即生成,它代表负0。而在整数数学中,负0是无效的。所以可以使用2的补码来表示负数。当使用2的补码时,对补码加1,产生了。但这时1位太靠左不能返回到byte类型的值。因此我们规定,-0和0的表示方法是一样的,-1的解码为。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:查看: 1051|回复: 10
-128~127 最高位是符号位,所以只能在后七位取值。负数最低为[HEX ] (-128),正数最高为 [HEX ] (127)
正数的补码与其原码相同,负数的补码为其反码在最低位加1。 (1)X=+1011011 (2) Y=-1011011 (1)根据定义有: [X]原码= [X]补码= (2) 根据定义有: [Y]原码= [Y]反码= [Y]补码= 补码表
某机字长32位,定点表示时,最高位为符号位, ⑴带符号定点小数的表示范围是多少? 如果是正数,那么最高位是 0,其最大值就是全等于1,即 2^32-1= 如果是负数,那么最高位是 1,通常此时是补码的 浮点表示时,阶码占10位,尾数占22位
最大的8位正数用原码表示是,正数原码转换成补码也是它本身,换成十进制就是+127 我们再看-127,原码为,补码为. 你发现没,-127的补码最后一位为1,如果再减掉1的话是不是还是在8位的表示范围内呢? 所以补码表示负数
首先,正数的补码是其本身,最高位为符号位为0.于是我们有最小的正小数: 0 000 01 = 2^(-15) = 0.125
xiaoguoer318
数在计算机中是以二进制形式表示的。 数分为有符号数和无符号数。 原码、反码、补码都是有符号定点数的表示方法。 一个有符号定点数的最高位为符号位,0是正,1是副。 以下都以8位整数为例, 原码就是这个数本身的二进制形式。 例如 0000001 就
简简单单生活
D 因为问题主要就是理解定点表示法。 所谓定点表示法,是指在计算机中所有数的小数点的位置人为约定固定不变。这样,小数点的位置就不必用记号&.&表示出来了。一般地说,小数点可约定固定在任何数位之后,但常用下列两种形式: 定点纯小数:约
16位字长有符号2进制整数补码范围: 00 0000b~11 1111b 表示的真值范围: -00 0000b~+11 1111b 即 -32768d~+32767d
8位字长: 原码范围:b~b 真值范围:-111 1111b~+111 1111b, 即 -127d~ +127d . 补码范围:b~b 真值范围:-b~+111 1111b, 即 -128d~ +127d 说明: 8位字长模 =2^8 =1 b 当[x]补 =100推荐这篇日记的豆列
······2015年1月 C/C++大版内专家分月排行榜第二2012年3月 C/C++大版内专家分月排行榜第二2011年11月 C/C++大版内专家分月排行榜第二2010年6月 C/C++大版内专家分月排行榜第二2010年5月 C/C++大版内专家分月排行榜第二
2011年4月 C/C++大版内专家分月排行榜第三2011年2月 C/C++大版内专家分月排行榜第三2010年8月 C/C++大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 我要卖房子信息发布 的文章

 

随机推荐