我将在Python中创建示例,因为我使用Python,但问题不在于Python。 可以说我想通过特定的值增加一个变量,使它保持在给定的边界。边界的增加或减少
所以对于增量和减量我有这两种功能:
def up (a, s, Bmax):
r = a + s
if r > Bmax : return Bmax
else : return r
def down (a, s, Bmin):
r = a - s
if r < Bmin : return Bmin
else : return r
注意:假设该变量的初始值“a”是已经在边界(分钟< =一个< = MAX),所以额外的初始检查不属于此功能。什么让我好奇,几乎所有我制作的节目都需要这些功能。
的问题是:
- 是那些归类为一些典型操作,并有他们的具体名称?
- 如果是,是否与内部处理器功能有一些对应关系,因此在某些编译器中进行了优化?
我之所以问是纯粹好奇,我当然不能在Python优化它,我知之甚少CPU架构。
更具体地讲,在一个8位无符号整数水平较低的增量会看,我想是这样的:
def up (a, s, Bmax):
counter = 0
while True:
if counter == s : break
if a == Bmax : break
if a == 255 : break
a += 1
counter += 1
我知道后者不会作出在Python任何意义如此对待它因为我天真的尝试想象低级代码增加了价值。有一些细微差别,例如签名,未签名,但我感兴趣的仅仅是无符号整数,因为我经常遇到它。
有趣的问题,让我挖,仍然无法找到确切的答案。在http://ptgmedia.pearsoncmg.com/images/0321335724/samplechapter/seacord_ch05.pdf,从内部讨论如何使用IA-32指令(jc和inc)来检测溢出。使用GCC,您可以使用-ftrapv来发出SIGABRT并注册一个处理程序并整理溢出。 –
我得到你的问题,但只是要清楚,你不能检测加法的结果是否大于它可以用你编写UP函数的方式表示的最大值。考虑一个有符号整数,如果你的当前值是0x7FFFFFFE,它比最大值小1,并且你想要加2,它将会溢出并产生-2,147,483,648,它小于它可以表示的最大值。所以你永远不会看到你的UP函数返回MAX –