找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 7568|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

想問下關(guān)于C語言16位整形變量強(qiáng)制轉(zhuǎn)換成32位計(jì)算操作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
如圖,從數(shù)組里取出來的值經(jīng)過計(jì)算不對�。£P(guān)于變量的定義:
        u8 time1,time2, time3,time4;
        u16 time5,time6;
        u32 time7,time8,time9;
WORD是把8位轉(zhuǎn)換成16位;



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

使用道具 舉報

沙發(fā)
ID:517466 發(fā)表于 2019-6-17 22:39 | 只看該作者
涉及到指針的操作了,一定要小心,指針指向什么類型,意味著占用存儲空間的不同。不如char行占用一個單元(字節(jié)單位),兩位的整形,占用兩個單元。用指針賦值的時候,會根據(jù)指針的類型,從內(nèi)存中取出對應(yīng)長度的單元,組織成數(shù)據(jù),然后賦值給接受對象。當(dāng)有不同類型之間的賦值時,就涉及到自動轉(zhuǎn)換的問題。小往大轉(zhuǎn),問題不大(但也涉及有符號時的出現(xiàn)問題)。大往小轉(zhuǎn),會丟數(shù)據(jù)。另外數(shù)據(jù)類型占用內(nèi)存單元,還涉及高位、低位的存儲順序,這個也一定要考慮,很重要。
你想要正確的結(jié)果,不如直接用time5=time1*256+time2;類似這樣的計(jì)算來得可靠。
回復(fù)

使用道具 舉報

板凳
ID:123289 發(fā)表于 2019-6-18 08:23 | 只看該作者
寫程序時應(yīng)盡量回避不確定的因素,因?yàn)槟悴荒艽_定編譯平臺是如何編譯它的。
本例:如果先移位,后轉(zhuǎn)換。則16位的數(shù)制,移不出個32位的結(jié)果,多余則溢出丟棄。
如果先轉(zhuǎn)換,后移位則是可以的。
既然你不能確定,就分兩步一定要處理,一步先轉(zhuǎn)換,再一步進(jìn)行移位。
學(xué)會規(guī)避不確定的因素,以保證正確率。
回復(fù)

使用道具 舉報

地板
ID:386053 發(fā)表于 2019-6-18 09:14 | 只看該作者
suncat0504 發(fā)表于 2019-6-17 22:39
涉及到指針的操作了,一定要小心,指針指向什么類型,意味著占用存儲空間的不同。不如char行占用一個單元( ...

謝謝大佬指教,我試試
回復(fù)

使用道具 舉報

5#
ID:386053 發(fā)表于 2019-6-18 15:45 | 只看該作者
yzwzfyz 發(fā)表于 2019-6-18 08:23
寫程序時應(yīng)盡量回避不確定的因素,因?yàn)槟悴荒艽_定編譯平臺是如何編譯它的。
本例:如果先移位,后轉(zhuǎn)換。則 ...

謝謝大佬指導(dǎo)
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表