欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 下面的數據類型運算結果和表達式對嗎? [打印本頁]

作者: zhth1979    時間: 2026-2-8 11:00
標題: 下面的數據類型運算結果和表達式對嗎?
float  A;  unsigned long B, C;   unsigned int D;
//方式1:
if(B > C)    D = (unsigned int)(fabs(A*(B - C)));        
else D = 0;
//方式2:if(B > C)    D = abs(A*(B - C));      
else D = 0;
我想得到的結果是無符號長整型數據 D(即:= 右邊的計算結果小數部分舍去,只保留整數)。這兩種方式運算有問題嗎?結果是一樣的嗎?



作者: wallywl    時間: 2026-2-8 15:15
      運算結果是一樣的。方式一是 對乘積求絕對值,結果是無符號整型。
  第二種是對乘積的浮點數求絕對值,然后強制類型轉換為無符號整型。




作者: glinfei    時間: 2026-2-10 08:55
有些問題,方式一可能好一點點,要看數值大小,小的時候可能一樣。主要是D你定義的不是長型整數,所以如果方式一,如果數值大,強制類轉換時會喪失精度;方式二,在abs傳參時就會出問題,因為它接受的就是整數,你傳浮點數可能會溢出或喪失精度。在C中可用labs()替換,在51我沒用過。
作者: zhth1979    時間: 2026-2-11 11:52
wallywl 發表于 2026-2-8 15:15
運算結果是一樣的。方式一是 對乘積求絕對值,結果是無符號整型。
  第二種是對乘積的浮點數求絕對 ...

我想得到的結果是無符號長整型數據 D(即:= 右邊的計算結果小數部分舍去,只保留整數)。這樣的話方式二應該不會溢出了吧?
作者: zhth1979    時間: 2026-2-11 11:53
glinfei 發表于 2026-2-10 08:55
有些問題,方式一可能好一點點,要看數值大小,小的時候可能一樣。主要是D你定義的不是長型整數,所以如果 ...

我想得到的結果是無符號長整型數據 D(即:= 右邊的計算結果小數部分舍去,只保留整數)。這樣的話方式二應該不會溢出了吧?
作者: glinfei    時間: 2026-2-13 10:35
zhth1979 發表于 2026-2-11 11:53
我想得到的結果是無符號長整型數據 D(即:= 右邊的計算結果小數部分舍去,只保留整數)。這樣的話方式二應 ...

abs()接受 int,你是long,要看啥系統和編譯器了,標準的會溢出。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1