,如果我加上或減去兩個短值,我怎麼能告訴我是否需要標誌進位條件的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