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就可以啦!
當int正負相乘的時候,也需要特別注意資料型別是否是unsigned~
uint和int相乘,如果int為負,則相乘的結果非常大 。
unsigned int leftval = 1;
int rightval = -1;
float result = leftval * rightval ;
the result is : 4.29497e + 009 . 並不是你想要的「-1」結果。
但是如果改為:
int leftval = 1;
int rightval = -1;
float result = leftval * rightval;
the result is : -1 . 得到你想要的-1的結果。
程式設計的時候要當心這種情況,特別是由於此,而引起的bug .
int整數相乘溢位
我們計算一天中的微秒數 long microsperday 24 60 60 1000 1000 正確結果應為 86400000000 system.out.println microsperday 實際上為 500654080問題在於計算過程中溢位了。這個計算式完全是以int運算來執行的,並且只有...
演算法思路 高精度乘法(大整數與int相乘)
這裡選擇相對簡單的int型整數和大整數相乘,來考慮其演算法的思路 按照小學算術的知識,兩個數相乘,可以拆開看成乙個數固定,另乙個數從個位開始,依次和這個數相乘 然後沒左移一位,相應的結果也左移一位,最後相加。其實硬體實現加法,也是基於這個最基本的原理 所以,在演算法的實現上就可以這麼來考慮 比如 7...
正負演算法生成圓
正負法是利用平面曲線將平面劃分成正負區域,對當前點產生的圓函式進行符號判別,利用負反饋調整以決定下乙個點的產生來直接生成圓弧。一 正負畫圓演算法描述 設要顯示圓的圓心在原點 0,0 半徑為r,初始點的座標為 0,r 順時針生成八分之一圓,令 f x,y x2 y2 r2 則圓的方程為 f x,y 0...