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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 496|回復: 5
打印 上一主題 下一主題
收起左側

下面的數據類型運算結果和表達式對嗎?

[復制鏈接]
跳轉到指定樓層
樓主
ID:686513 發表于 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(即:= 右邊的計算結果小數部分舍去,只保留整數)。這兩種方式運算有問題嗎?結果是一樣的嗎?


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:1167348 發表于 2026-2-8 15:15 | 只看該作者
      運算結果是一樣的。方式一是 對乘積求絕對值,結果是無符號整型。
  第二種是對乘積的浮點數求絕對值,然后強制類型轉換為無符號整型。



回復

使用道具 舉報

板凳
ID:844772 發表于 2026-2-10 08:55 | 只看該作者
有些問題,方式一可能好一點點,要看數值大小,小的時候可能一樣。主要是D你定義的不是長型整數,所以如果方式一,如果數值大,強制類轉換時會喪失精度;方式二,在abs傳參時就會出問題,因為它接受的就是整數,你傳浮點數可能會溢出或喪失精度。在C中可用labs()替換,在51我沒用過。
回復

使用道具 舉報

地板
ID:686513 發表于 2026-2-11 11:52 | 只看該作者
wallywl 發表于 2026-2-8 15:15
運算結果是一樣的。方式一是 對乘積求絕對值,結果是無符號整型。
  第二種是對乘積的浮點數求絕對 ...

我想得到的結果是無符號長整型數據 D(即:= 右邊的計算結果小數部分舍去,只保留整數)。這樣的話方式二應該不會溢出了吧?
回復

使用道具 舉報

5#
ID:686513 發表于 2026-2-11 11:53 | 只看該作者
glinfei 發表于 2026-2-10 08:55
有些問題,方式一可能好一點點,要看數值大小,小的時候可能一樣。主要是D你定義的不是長型整數,所以如果 ...

我想得到的結果是無符號長整型數據 D(即:= 右邊的計算結果小數部分舍去,只保留整數)。這樣的話方式二應該不會溢出了吧?
回復

使用道具 舉報

6#
ID:844772 發表于 2026-2-13 10:35 | 只看該作者
zhth1979 發表于 2026-2-11 11:53
我想得到的結果是無符號長整型數據 D(即:= 右邊的計算結果小數部分舍去,只保留整數)。這樣的話方式二應 ...

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表