作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一共有三个变量,类型如下
uint64_t old_addr, new_addr;
int delta;
我想做这个作业
new_addr = old_addr + delta;
但是问题是,当 old_addr=915256
和 delta=-6472064
时,new_addr
变为 18446744069414584325
为了解决我必须检查一些事情的问题:
if ( delta < 0 ) {
if ( old_addr < abs(delta) )
new_addr = 0;
else
new_addr = old_addr + delta;
}
有没有更好更高效的方法?
最佳答案
这称为饱和加法,一些处理器为此有特殊的机器指令。您可以将该代码提取到内联函数中,并根据目标执行环境使用机器指令。
而不是 abs(delta)
你可以简单地写-delta
,因为你已经知道 delta < 0
.
关于c++ - 将 "int"添加到 "uint_64t",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9631115/
我是一名优秀的程序员,十分优秀!