不知道為什么輸出的是垃圾值,我的編譯器是vs2010,32位的,不知道和這個有沒有關系
uj5u.com熱心網友回復:
90625的平方太大了,溢位了uj5u.com熱心網友回復:
把90625也定義成long long,或者強制轉換一下(long long)90625uj5u.com熱心網友回復:
90625首先是int型,也就是說在賦值給squ之前,這是兩個int型資料相乘,因此會有溢位。所以建議這么寫squ=(long long)90625*90625;
使得右邊的運算式使用long long型別,這就可以正常獲得結果了
uj5u.com熱心網友回復:
看一下反匯編的代碼可能會更清楚一些squ = 90625 * 90625;
對應的反匯編代碼是
008018BE mov dword ptr [squ],0E986C401h
008018C5 mov dword ptr [ebp-8],0FFFFFFFFh
可以看出,90625*90625的值應該是0x1E986C401,第一行匯編指令的作用是把0x1E986C401的低4個位元組即0xE986C401值放到squ的低4個位元組中去,因為E的最高位是1,所以第二行匯編指令把0xFFFFFFFF作為補充放到squ的高4個位元組上去,此時squ的值是0xFFFFFFFFE986C401
而如果C代碼是
squ = (long long)90625 * 90625;
此時對應的匯編指令是
005518BE mov dword ptr [squ],0E986C401h
005518C5 mov dword ptr [ebp-8],1
第一行匯編代碼沒變,第二行是把0x1E986C401中多出來的1拷貝到squ的低4個位元組中去,即此時squ的值是0x00000001E986C401
uj5u.com熱心網友回復:
謝謝各位兄弟
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/44308.html
標籤:C語言
下一篇:求各位大佬幫幫忙
