,如果我加上或减去两个短值,我怎么能告诉我是否需要标志进位条件的java总之我怎么能知道是否需要携带
回答
仅在加法和减法的情况下,当两个操作数都是正值且结果为负值时发生算术溢出,反之亦然。
class OverflowTest
{
public static void main (String[] args)
{
System.out.println(isOverflow((short)32767, (short)32767, '+'));
System.out.println(isOverflow((short)-32767, (short)-32767, '+'));
System.out.println(isOverflow((short)32767, (short)-32767, '+'));
}
private static boolean isOverflow(short a, short b, char op) {
short c = (op == '+') ? (short)(a+b) : (short)(a-b);
if((a > 0 && b > 0 && c < 0) || (a < 0 && b < 0 && c > 0))
return true;
return false;
}
}
文本解释是好的,但我真的不能跟随你的代码示例。 – Voo 2012-04-29 00:08:48
@Voo:你不明白什么? – blackcompe 2012-04-29 00:40:22
嗯,我要么省略这个例子,要么提供一个通用的例子。但是,只有当两个值都是正值时才起作用。这可能会导致更多的困惑,我想。 – Voo 2012-04-29 09:30:08
您可以使用更大的做加法或减法类型如int
,将其转换为short
,然后测试演员是否更改了该值。
int i = s1 + s2;
short s = (short)i;
if (i != s) { /* overflow */ }
实际上*任何*小于int值的算术运算无论如何都会扩展为int,所以我们不需要在那里进行int转换。 – Voo 2012-04-29 00:08:11
@Voo:好点,我删除了不必要的演员。 – 2012-04-29 00:09:54
携带和溢出是两个不同的东西! http://www.piclist.com/techref/method/math/c-vs-o.htm – 2012-04-30 15:51:00
- 1. java - 我有一个Date()。我怎么知道它是否在HH:MM之后?
- 2. 给定一个字符串,我怎么知道它是否需要解码
- 3. 我怎么能知道是否org.eclipse.swt.browser.Browser.setText(HTML)renderred HTML完成
- 4. 我怎么能知道mongodb是否由猫鼬开始?
- 5. 我怎么可能知道SQLcommand是否妥善处理?
- 6. 我怎么能知道用户是否登录
- 7. 我是否需要知道Emacs Lisp才能使用GNU/Emacs
- 8. 我是否需要知道Python才能使用OpenCV
- 9. 我怎么能知道的信号
- 10. 我怎么能知道的AppDelegate
- 11. 我怎么知道什么TextView是clickbale?
- 12. 我怎么知道QTreeView是空的?
- 13. cURL:我怎么知道我的cookies是否设置正确?
- 14. 我怎么知道我的minVersion是否好?
- 15. 我怎么知道一个对象是否是唯一的
- 16. 我怎么知道BeginAcceptSocket回调需要IAsyncResult参数?
- 17. 我怎么能知道一个PrintWriter
- 18. 我怎么能知道在Linux上
- 19. 我需要知道从Java到JavaScript?
- 20. 我怎么才能知道java中的当前类加载器
- 21. 我怎么看/我可以知道我需要发送什么文章?
- 22. 在运行时,我怎么知道我是否在WinXP +上? win32
- 23. Windows Mobile:我怎么知道我是否安装了GPS?
- 24. 鉴于经纬度,我怎么知道它是否是日光?
- 25. 我怎么知道流是结束?
- 26. 我怎么能知道2日期之间由php多少天?
- 27. php和newlines:我需要知道什么?
- 28. 我怎么能知道或定义主要活动(Android版AIR)
- 29. 我怎么能知道什么是SQLite中
- 30. 我怎么知道Vaadin的窗户是否打开?
...你在实施DCPU-16吗? – 2012-04-28 23:30:17
为什么你需要这样做? – 2012-04-28 23:37:04
我正在实现我自己的虚拟cpu(但很好猜猜Matti!) – 2012-04-30 15:50:05