java 整數溢出檢測,Java如何處理整數下溢和溢出以及如何檢查它?

How does Java handle integer underflows and overflows?

Leading on from that, how would you check/test that this is occurring?

解決方案

If it overflows, it goes back to the minimum value and continues from there. If it underflows, it goes back to the maximum value and continues from there.

You can check that beforehand as follows:

public static boolean willAdditionOverflow(int left, int right) {

if (right < 0 && right != Integer.MIN_VALUE) {

return willSubtractionOverflow(left, -right);

} else {

return (~(left ^ right) & (left ^ (left + right))) < 0;

}

}

public static boolean willSubtractionOverflow(int left, int right) {

if (right < 0) {

return willAdditionOverflow(left, -right);

} else {

return ((left ^ right) & (left ^ (left - right))) < 0;

}

}

(you can substitute int by long to perform the same checks for long)

If you think that this may occur more than often, then consider using a datatype or object which can store larger values, e.g. long or maybe java.math.BigInteger. The last one doesn't overflow, practically, the available JVM memory is the limit.

If you happen to be on Java8 already, then you can make use of the new Math#addExact() and Math#subtractExact() methods which will throw an ArithmeticException on overflow.

public static boolean willAdditionOverflow(int left, int right) {

try {

Math.addExact(left, right);

return false;

} catch (ArithmeticException e) {

return true;

}

}

public static boolean willSubtractionOverflow(int left, int right) {

try {

Math.subtractExact(left, right);

return false;

} catch (ArithmeticException e) {

return true;

}

}

The source code can be found here and here respectively.

Of course, you could also just use them right away instead of hiding them in a boolean utility method.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272788.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272788.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272788.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

console 程序隨系統啟動及隱藏當前程序窗口

應業務需求&#xff0c;程序需要與系統啟動而自動運行&#xff0c;故加入以下代碼&#xff0c;保存成 .bat文件 &#xff0c;雙擊執行即可 reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v HuazhuPushRecord /t reg_sz /d "your…

Linq用法筆記

一、什么是Linq?LINQ即Language Integrated Query(語言集成查詢)&#xff0c;LINQ是集成到C#和Visual Basic.NET這些語言中用于提供查詢數據能力的一個新特性。LINQ是一種用來進行數據訪問的編程模型&#xff0c;Linq可以用相同的語法訪問不同的數據源&#xff0c;比如xml、數…

用例圖練習

轉載于:https://www.cnblogs.com/fzuyzy/p/4925246.html

java excel row遍歷空_Java poi讀取,寫入Excel,處理row和cell可能為空的情況

首先需要導入包import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;然后寫方法&a…

JQuery常用選擇器總結

作為網站開發者來說&#xff0c;不可避免的需要和頁面打交道&#xff0c;很多時候都需要去操作一些頁面上的元素&#xff0c;掌握常用的Jquery選擇器是十分有必要的。現從網上整理一些常用的Jquery選擇器&#xff0c;希望能給大家帶來一些開發上的便利。一、基本選擇器&#xf…

java 常量 內存分配_Java內存分配之堆、棧和常量池

寄存器&#xff1a;最快的存儲區&#xff0c;位于不同于其他存儲區的地方——處理器內部。寄存器的數量極其有限&#xff0c;所以寄存器由編譯器根據需求 進行分配。你不能直接控制&#xff0c;也不能在程序中感覺到寄存器存在的任何跡象。棧&#xff1a;存放基本類型的數據和對…

三種SQLServer分頁查詢語句筆記

作為程序員來說&#xff0c;與數據庫打交道是十分頻繁的分頁查詢是一個開發者必須掌握的基本知識點&#xff0c;目前整理了下面三種SQLServer分頁查詢語句的寫法&#xff0c;僅供參考。一、Top Not IN 方式&#xff08;查詢靠前的數據較快&#xff09;語法格式&#xff1a;sele…

sqlserver2008r2安裝

轉載于:https://www.cnblogs.com/sprinng/p/4932739.html

JQuery七個常犯的錯誤

1、 亂用選擇器JQuery選擇器調用代價很大&#xff0c;反復調用效率更低。應采用緩存對象的方法或采用鏈式調用的方式。//錯誤的寫法$("#button").click(function(){ $(#list li).addClass(strong); $(#list li).css(color,red);});//正確的寫法$("#button…

java流讀取xml_使用FileInputStream(用于Java)讀取XML文件?

這是交易.對于我的項目,我必須使用Java和XStream對隨機樹進行序列化和反序列化.我的老師制作了Tree / RandomTree算法,所以我不必擔心.我不知道該怎么做是這樣的&#xff1a;我使用FileInputStream來讀/寫我序列化和反序列化的xml文件,但是當我反序列化時,我不知道用于讀取文件…

后臺尋路系統的大體思路與流程

總的思路就是: 1, 通過前臺unity的navigation的的接口: 獲得頂點和三角形集合數據 2, 將前臺的mesh數據轉換成標準的obj格式數據 3. 強obj mesh數據經過一系列轉換和優化, 生成recastnavigation插件尋路模塊detour需要的導航數據 故制作了工具MakeNavmeshData生成detour需要的…

關于WCF、WebAPI、WCFREST、WebService之間的區別總結

在.net平臺下&#xff0c;有大量的技術讓你創建一個HTTP服務&#xff0c;像Web Service&#xff0c;WCF&#xff0c;現在又出了Web API。在.net平臺下&#xff0c;你有很多的選擇來構建一個HTTP Services。我分享一下我對Web Service、WCF以及Web API的看法。一、Web Service1、…

java 程序是由什么組成的 java_從零開始的JAVA -2. java程序的構成及命名規則

1.public classYD2.{3. public static voidmain (string args[ ])4. {5. System.out.println("我是一名學習JAVA的新人&#xff01;");6. }7.}第一行 public 代表這是一個公共類(可省略) class 是聲明一個類&#xff0c;在他后面的YD 就是類名(類名可以隨意寫)第二行…

你應該知道的jQuery技巧【收藏】

jQuery的存在&#xff0c;讓學習前端開發的人感到前端越來越容易入門了&#xff0c;用簡單的幾行代碼就可以實現需求&#xff0c;但是&#xff0c;你真的會用jQuery么&#xff0c;當代碼運行 后無法看到自己預期的效果&#xff0c;是不是覺得jQuery出了問題&#xff0c;其實&am…

LINQ表達式用法整理

收集一些Linq表達式中的一些比較常用的寫法&#xff0c;希望能給大家工作當中帶來一些便利。1. Where子句條件過濾結果集型&#xff08;集合數據使用這種&#xff0c;譬如數組、列表數據&#xff0c;同樣適用于Datatable等多列數據集&#xff09;類SQL語句的寫法&#xff0c;對…

Eclipse is running in a JRE, but a JDK is required 解決方法(轉)

轉自&#xff1a;http://comeonbabye.iteye.com/blog/1186239 安裝Maven后每次啟動出現警告信息: Eclipse is running in a JRE, but a JDK is requiredSome Maven plugins may not work when importing projects or updating source folders. 分兩步解決問題: 1. 檢查Eclipse正…

java線程歸并排序_Java-歸并排序 - FeanLau的個人空間 - OSCHINA - 中文開源技術交流社區...

public class MergeSort {static int number0;public static void main(String[] args) {int[] a {26, 5, 98, 108, 28, 99, 100, 56, 34, 1 };printArray("排序前&#xff1a;",a);MergeSort(a);printArray("排序后&#xff1a;",a);}private static voi…

收集一些優秀的DoNet開源項目

Paste_Image.pngJson.NEThttp://json.codeplex.com/ Json.Net是一個讀寫Json效率比較高的.Net框架.Json.Net 使得在.Net環境下使用Json更加簡單。通過Linq To JSON可以快速的讀寫Json&#xff0c;通過JsonSerializer可以序列化你的.Net對象。讓你輕松實現.Net中所有類型(對象,基…

git初探

1 Linux下Git和GitHub環境的搭建 第一步&#xff1a; 安裝Git&#xff0c;使用命令 “sudo apt-get install git” 第二步&#xff1a; 到GitHub上創建GitHub帳號 第三步&#xff1a; 生成ssh key&#xff0c;使用命令 “ssh-keygen -t rsa -C "your_emailyouremail.com&q…

java編程思想 初始化_《java編程思想》_第五章_初始化與清理

初始化和清理是涉及安全的兩個問題&#xff0c;java中采用了構造器&#xff0c;并額外提供了“垃圾回收器”&#xff0c;對于不再使用的內存資源&#xff0c;垃圾回收器能自動將其釋放。一、用構造器確保初始化java中&#xff0c;通過提供構造器&#xff0c;類的設計者可以確保…