EIntOverFlow 的問題 |
答題得分者是:jow
|
shrwei
一般會員 發表:3 回覆:2 積分:1 註冊:2006-07-10 發送簡訊給我 |
這問題因該滿基本的,不過我不太了解中間的運作過程(我使用的是Delphi 6)
想請教一下,為何使用 Floor 再用shr 會引發 EIntOverFlow 的問題? ~.~妖受以前的前輩教我用shr 來代替 div ..現在看起來問題很多~@@" [code delphi] procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin i:= -7 shr 1; //i值正常 i:= Floor(-7) div 2; //i值正常 i:= Floor(-7) shr 1; //i值異常 i:= Floor((100-107) * (10/10)) shr 1; i:= 400 i; end; [/code] [code delphi] procedure TForm1.Button1Click(Sender: TObject); var i: integer; a,b: integer; begin a:= 100; b:= 112; i := ((a - b) shr 1); //i值異常 i:= ((100 - 112) shr 1); //i值正常 end; [/code] |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
與Floor()無關, 可是為什麼Delphi shr 的動作,在負值時對於'常數' 與 ' 變數' 處理不一樣???
[code delphi] procedure TForm1.Button2Click(Sender: TObject); var I: Integer; begin I := -2; Label1.Caption := Format('%X', [I]); I := -2 shr 1; Label2.Caption := Format('%X', [I]); I := -2; I := I shr 1; Label3.Caption := Format('%X', [I]); //結果顯示 //Label1.Caption = 'FFFFFFFE'; //Label2.Caption = 'FFFFFFFF'; //Label3.Caption = '7FFFFFFF'; end; [/code]
編輯記錄
jow 重新編輯於 2007-10-05 17:06:13, 註解 無‧
|
shrwei
一般會員 發表:3 回覆:2 積分:1 註冊:2006-07-10 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
在System.pas中, 自己看^^
不知道那些 built into the compiler 的東西, 有沒有用到這些程式碼? // ------------------------------------------------------------------------------ // 64-bit signed shift right // ------------------------------------------------------------------------------ // target (EAX:EDX) count (ECX) procedure __llshr; // ------------------------------------------------------------------------------ // 64-bit unsigned shift right // ------------------------------------------------------------------------------ // target (EAX:EDX) count (ECX) procedure __llushr;
編輯記錄
jow 重新編輯於 2007-10-05 18:27:15, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |