正外溢性和负外溢性什么意思?

正外溢性和负外溢性什么意思?,第1张

其实大家主关注的所谓溢出效应过程应该是指一个组织在进行某项活动时,相信一份理解是一种成败之后的活动所预期的效果,而且会对组织之外的人或社会产生的影响,总感觉那是一种最精明的态度所以是正外溢性。
当然就是某项活动要有外部收益,而且是活动的主体得不到的收益,或许就是策略上负出感觉就是负外溢性吧。

采用双符号位检测溢出的方法:在运算时,两个符号位同时参加运算,结果中如果两个符号位不同,则表示产生了溢出若符号为01,则表示运算结果大于允许取值范围的最大正数,称为正溢出;若符号位为10,则表示运算结果是负数,其值小于允许取值范围的最小负数,称为负溢出两个符号位的最高位仍为正确的符号

加法溢出:

无符号整数溢出判断较简单

有符号整数溢出的时候只存在正溢出和负溢出两种情况,即两正数相加得到一个负数或两负数相加得到一个正数。

需要注意的是

这种方法是无法判断溢出的,因为x+y无论是否溢出,x+y-y始终等于x是因为补码加上形成一个阿贝尔群,由阿贝尔群的交换律和结合律有(x+y)-x==y。

减法溢出

减去一个数可以理解为加上这个数的负数,于是

但是这样写是存在一定问题的,没有考虑TMIN(即取值范围的最小值,32位时为-2147483648),TMIN没有相反数,所以需要考虑y为TMIN的情况。其实当y==TMIN时,只有在x>=0的情况下x-y才会溢出

乘法溢出

否。
用变形补码进行加减运算时,当运算结果的符号位出现“01”或者“10”时,则表示产生溢出。
变形补码的最高位(第一个符号位)总是表示正确的符号,比如"00"、“01”分别表示正数、正溢出(上溢),"11"、“10”表示负数、负溢出(下溢)。
总的说来就是符号位左边那一位表示正确的符号,0为正,1为负;右边那一位如果和左边的相同,如:"00”表示正且无溢出,"11"表示负且无溢出。
如果右边那一位与左边那一位不一样,则表示有溢出。

在用二进制进行加减计算的时候,要看“最高位的进位”就“次高位的进位”。
这两个进位,如果相同,则无溢出。若不同,则溢出。
拓展:
1
在几乎所有计算机语言中,不管是新的语言还是旧的语言,使缓冲区溢出的任何尝试通常都会被该语言本身自动检测并阻止(比如通过引发一个异常或根据需要给缓冲区添加更多空间)。
2
当应用程序读取用户(也可能是恶意攻击者)数据,试图复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时(换言之,假设代码申请了
N
字节大小的内存缓冲区,随后又向其中复制超过
N
字节的数据)。内存缓冲区就可能会溢出。想一想,如果你向
12
盎司的玻璃杯中倒入
16
盎司水,那么多出来的
4
盎司水怎么办?当然会满到玻璃杯外面了!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10517133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存