代码补全的几个问题

补码是一个比较让人烦恼的问题。1:补码的定义图1从上述定义可以看出,对于负数来说,图2这里的x代表的是一个负数,比如x=-101,n代表的是x这个负数不考虑符号

大家好,感谢邀请,今天来为大家分享一下代码补全的几个问题的问题,以及和的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

图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

———————–

用户评论

代码补全的几个问题
红尘滚滚

补码这东西真是费劲脑汁啊!感觉理解起来比二进制还要难…希望博主以后能多讲一些具体实例,这样更容易记忆和运用。

    有13位网友表示赞同!

代码补全的几个问题
一个人的荒凉

补码一直觉得挺绕人,尤其是超出机器所能处理的数据范围的时候。这篇博客解释的很清晰了,对我学习很有帮助!

    有14位网友表示赞同!

代码补全的几个问题
风中摇曳着长发

其实我觉得补码这玩意没什么意思, 直接用二进制就行啊,何必弄这么复杂?浪费时间和精力。

    有16位网友表示赞同!

代码补全的几个问题
我没有爱人i

博主分析的确实很到位!特别是 "补码的几个问题" 这句话让我豁然开朗。 过去我一直以为补码很简单,只学了表面,没想到还有那么多的细节和陷阱需要注意!

    有18位网友表示赞同!

代码补全的几个问题
我绝版了i

对补码的概念一直理解不清,这次终于明白了!这篇博客解释得很详细,比以前看过的教材通俗易懂多了。感谢博主!

    有16位网友表示赞同!

代码补全的几个问题
病态的妖孽

我之前学过补码的知识,但是遇到了一个问题,就是关于负数转化补码的时候常常会出错。这个博客应该讲了怎么解决这个问题吧?

    有7位网友表示赞同!

代码补全的几个问题
暖栀

我觉得这篇文章写得不错,尤其是对于一些对计算机原理一窍不通的人来说很有用。能把补码这种复杂的理论解释得这么通俗易懂确实不容易!

    有10位网友表示赞同!

代码补全的几个问题
煮酒

看了这篇博客后我更加明确了解了补码的应用场景,以前一直觉得它是比较抽象的概念,现在突然觉得非常实用!

    有15位网友表示赞同!

代码补全的几个问题
一点一点把你清空

补码的问题的确很多,尤其是当数据量很大时,很容易出现错误。 我想问问博主,对于这种大数据量的处理,有没有什么更有效的方法?

    有17位网友表示赞同!

代码补全的几个问题
站上冰箱当高冷

我觉得这篇博客还是有一定的参考价值的,至少让我对补码有一个全新的认识! 不过希望以后作者能提供一些实际的案例和例子,这样更好理解和运用到实践中!

    有17位网友表示赞同!

代码补全的几个问题
灬一抹丶苍白

作为一名程序员,我对补码有很好的了解。这篇博客介绍了一些基础知识,对于初学者来说还是很有启发性的。

    有12位网友表示赞同!

代码补全的几个问题
执妄

这篇文章让我对补码有了更深入的理解!原来它不仅是在计算负数时才会用到,在其他操作中也很重要!例如:溢出问题,逻辑运算等等。看来学习补码真的很关键啊。

    有20位网友表示赞同!

代码补全的几个问题
执笔画眉

博主解释得真的太详细了!我以前一直觉得补码很复杂,现在终于明白了!感谢分享这篇博客!

    有16位网友表示赞同!

代码补全的几个问题
还未走i

补充一下,个人认为补码的应用场景还可以扩展到其他领域,例如:密码学、图像处理等等。 期待博主在未来可以探讨这些方面的应用!

    有11位网友表示赞同!

代码补全的几个问题
该用户已上天

我试着把补码应用到实际项目中,发现还挺用处!这篇博客让我意识到补码的重要性,以后我会更加重视它的学习!

    有11位网友表示赞同!

代码补全的几个问题
青墨断笺み

我觉得这篇博客写的很不错,但是对于一些更深入的问题,比如不同数据类型补码的实现方式等等,文章并没有详细讲解。希望博主可以进一步补充完善!

    有10位网友表示赞同!

代码补全的几个问题
蔚蓝的天空〃没有我的翅膀

这篇博客对我来说很有帮助,特别是它提到的补码操作和常见问题,让我在编写代码时能够更加注意这些细节!

    有6位网友表示赞同!

代码补全的几个问题
把孤独喂饱

补码这东西确实挺抽象的,不过经过这篇博文的讲解,我感觉自己距离理解它越来越近了!希望能有更多类似的科普文章分享!

    有7位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/99461.html

(0)
小su's avatar小su
上一篇 2024年8月29日 下午10:49
下一篇 2024年8月29日 下午10:55

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注