int整數相乘溢位

2021-08-03 15:54:37 字數 398 閱讀 6218

我們計算一天中的微秒數: 

long microsperday = 24 * 60 * 60 * 1000 * 1000;// 正確結果應為:86400000000  

system.out.println(microsperday);// 實際上為:500654080

問題在於計算過程中溢位了。這個計算式完全是以int運算來執行的,並且只有在運算完成之後,其結果才被提公升為long,而此時已經太遲:計算已經溢位。 解決方法使計算表示式的第乙個因子明確為long型,這樣可以強制表示式中所有的後續計算都用long運算來完成,這樣結果就不會溢位: 

long microsperday = 24l * 60 * 60 * 1000 * 1000;

int 正負相乘

unsigned int s value if s value 0xffff s value 65535 s value 1 flag 1 測得的s value為65535,進入if判斷後,發現s value的值不變。一看才發現我設定的資料型別為unsigned int,改為long int就可以啦...

整數溢位,如何判斷整數溢位

c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的乙個運算元是有符號書,另乙個是無符號數,那麼有符號數 會被轉換為無符號數 表示範圍小的總是被轉換為表示範圍大的 那麼溢位也不會發生。但是,...

整數溢位,如何判斷整數溢位

c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的乙個運算元是有符號書,另乙個是無符號數,那麼有符號數 會被轉換為無符號數 表示範圍小的總是被轉換為表示範圍大的 那麼溢位也不會發生。但是,...