大家好,感谢邀请,今天来为大家分享一下代码补全的几个问题的问题,以及和的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
图1
从上面的定义可以看出,对于负数,
图2
这里的x代表负数,比如x=-101,n代表负数x的位数,不考虑符号位,这里等于3。图2可以变成
图3
这意味着负数的补码加上负数的绝对值将返回零,例如
图4
这里1011是-5的补码,最高位是符号位。根据图3的定义,这里的n等于3,所以-5的补码
1011加上-5 5的绝对值,即0101,答案是2的四次方,即2^(n+1),此时的结果已经超出了上面数字的位数(包括符号位4位),如果保留4位,则结果为0000,即负数的补码加上负数的绝对值将与符号位一起重置为零。
当然,如果不计算符号位,就是3位数值的部分相加。
当然它会被重置为零。
一个字节是8位。如果用原码来表示正整数(包括0),可以表示0-255,即2^8=256,总共256种状态,从全0到全1的各种排列组合。如果要表示负数,则符号位需要占用一位(最高位,1表示负数,0表示正数),所以最大绝对值范围是0-127,即2 ^7=128,正反共128种。状态,如果不做特殊处理,此时0占据两个编码,10000000为负0,00000000为正0。数据表示范围为-127到-0和+0到127,所以总共是一个字节只有255 这种状态是因为0 可以分为正0 和负0,这没有数学意义,而且浪费编码。因此,人们想到了使用负0,即当遇到负数时,可以使用补码表示来解决问题,而当遇到正数或0时,则保留原来的代码表示。所以,这个负0自然是经过补码算法处理后,用来表示-128。
为了证明10000000的负0代表-128的补码的正确性,考虑
因为01111111是+127的原码,所以上述运算相当于计算(-128+127)的结果。显然结果应该是-1,而11111111就是-1的补码。其他的都可以以此类推,所以10000000 代表-128的补码是正确的。
上述运算也说明了补码的重要作用就是将减法(127-128)运算变为加法(-128+127)运算。
总之:
二进制补码:8位二进制补码可以表示的数字范围是-128~127。
3:变形补体
对于小数,其补码定义为
图5
即十进制补码的定义中,用整数部分的哪一位来表示符号位。
图6
图6 中的定义也是针对小数的,其中100 是二进制,代表数字4。该定义意味着每个小数有两个符号位。
图7
图8
图8 显示了两个正小数的加法。在这种情况下,不会发生溢出。这是因为两个小数都小于0.5,所以它们的和小于1。如果是00.11+00.10,则结果是01.01。在这种情况下,由于两位小数之和超过1,因此发生溢出。另一个例子
图9
这是两个负小数的补码相加,结果也不会溢出。但如果仔细观察,可以发现加法过程中发生了从小数最高位到符号位的进位,那么为什么没有溢出呢?这是因为小数11.10101和11.10111的两个补码的数值部分都大于0.5,也就是说两个负小数的绝对值都小于0.5,并且两个绝对值的小数相加小于0.5会导致绝对值不能大于1,但是如果使用二进制补码加法,加法的绝对值会超过1,所以会出现进位,但是由于是两个负数相加, 那是
11.11=-0.75
+ 11.10=-0.5
———————–
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/99461.html
用户评论
红尘滚滚
补码这东西真是费劲脑汁啊!感觉理解起来比二进制还要难…希望博主以后能多讲一些具体实例,这样更容易记忆和运用。
有13位网友表示赞同!
一个人的荒凉
补码一直觉得挺绕人,尤其是超出机器所能处理的数据范围的时候。这篇博客解释的很清晰了,对我学习很有帮助!
有14位网友表示赞同!
风中摇曳着长发
其实我觉得补码这玩意没什么意思, 直接用二进制就行啊,何必弄这么复杂?浪费时间和精力。
有16位网友表示赞同!
我没有爱人i
博主分析的确实很到位!特别是 "补码的几个问题" 这句话让我豁然开朗。 过去我一直以为补码很简单,只学了表面,没想到还有那么多的细节和陷阱需要注意!
有18位网友表示赞同!
我绝版了i
对补码的概念一直理解不清,这次终于明白了!这篇博客解释得很详细,比以前看过的教材通俗易懂多了。感谢博主!
有16位网友表示赞同!
病态的妖孽
我之前学过补码的知识,但是遇到了一个问题,就是关于负数转化补码的时候常常会出错。这个博客应该讲了怎么解决这个问题吧?
有7位网友表示赞同!
暖栀
我觉得这篇文章写得不错,尤其是对于一些对计算机原理一窍不通的人来说很有用。能把补码这种复杂的理论解释得这么通俗易懂确实不容易!
有10位网友表示赞同!
煮酒
看了这篇博客后我更加明确了解了补码的应用场景,以前一直觉得它是比较抽象的概念,现在突然觉得非常实用!
有15位网友表示赞同!
一点一点把你清空
补码的问题的确很多,尤其是当数据量很大时,很容易出现错误。 我想问问博主,对于这种大数据量的处理,有没有什么更有效的方法?
有17位网友表示赞同!
站上冰箱当高冷
我觉得这篇博客还是有一定的参考价值的,至少让我对补码有一个全新的认识! 不过希望以后作者能提供一些实际的案例和例子,这样更好理解和运用到实践中!
有17位网友表示赞同!
灬一抹丶苍白
作为一名程序员,我对补码有很好的了解。这篇博客介绍了一些基础知识,对于初学者来说还是很有启发性的。
有12位网友表示赞同!
执妄
这篇文章让我对补码有了更深入的理解!原来它不仅是在计算负数时才会用到,在其他操作中也很重要!例如:溢出问题,逻辑运算等等。看来学习补码真的很关键啊。
有20位网友表示赞同!
执笔画眉
博主解释得真的太详细了!我以前一直觉得补码很复杂,现在终于明白了!感谢分享这篇博客!
有16位网友表示赞同!
还未走i
补充一下,个人认为补码的应用场景还可以扩展到其他领域,例如:密码学、图像处理等等。 期待博主在未来可以探讨这些方面的应用!
有11位网友表示赞同!
该用户已上天
我试着把补码应用到实际项目中,发现还挺用处!这篇博客让我意识到补码的重要性,以后我会更加重视它的学习!
有11位网友表示赞同!
青墨断笺み
我觉得这篇博客写的很不错,但是对于一些更深入的问题,比如不同数据类型补码的实现方式等等,文章并没有详细讲解。希望博主可以进一步补充完善!
有10位网友表示赞同!
蔚蓝的天空〃没有我的翅膀
这篇博客对我来说很有帮助,特别是它提到的补码操作和常见问题,让我在编写代码时能够更加注意这些细节!
有6位网友表示赞同!
把孤独喂饱
补码这东西确实挺抽象的,不过经过这篇博文的讲解,我感觉自己距离理解它越来越近了!希望能有更多类似的科普文章分享!
有7位网友表示赞同!