第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Java 如何將一個(gè)32位的float 拆成兩個(gè)16位的short 不損失精度

Java 如何將一個(gè)32位的float 拆成兩個(gè)16位的short 不損失精度

莫回?zé)o 2018-07-21 10:18:23
老師要求Java用modbusRTU協(xié)議向PLC傳數(shù)據(jù),可一個(gè)寄存器只有16位,現(xiàn)在想要傳一個(gè)32位的float,又不想損失精度,想把float拆成一個(gè)short[]數(shù)組傳過(guò)去,求助我該怎么做啊。對(duì)了,還有合并。
查看完整描述

1 回答

?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊

采用Float.floatToRawIntBits()函數(shù)將float類(lèi)型轉(zhuǎn)換成對(duì)應(yīng)的32bit整數(shù)類(lèi)型,然后將其拆分成兩個(gè)short類(lèi)型。代碼大致如下:
float value = 要轉(zhuǎn)換的浮點(diǎn)數(shù)
int intBits = Float.floatToRawIntBits(value);
short[] send = new short[]{(intBits >> 16) & 0xFFFF, intBits & 0xFFFF};
這里取到的send就是你可以用來(lái)發(fā)送的兩個(gè)16bit數(shù)組

附上floatToRawIntBits說(shuō)明:
Float.floatToRawIntBits
public static int floatToRawIntBits(float value)根據(jù) IEEE 754 浮點(diǎn)“單一格式”位布局,返回指定浮點(diǎn)值的表示形式,并保留非數(shù)字 (NaN) 值。 
第 31 位(掩碼 0x80000000 選定的位)表示浮點(diǎn)數(shù)的符號(hào)。第 30-23 位(掩碼 0x7f800000 選定的位)表示指數(shù)。第 22-0 位(掩碼 0x007fffff 選定的位)表示浮點(diǎn)數(shù)的有效位數(shù)(有時(shí)也稱(chēng)為尾數(shù))。

如果參數(shù)為正無(wú)窮大,則結(jié)果為 0x7f800000。

如果參數(shù)為負(fù)無(wú)窮大,則結(jié)果為 0xff800000。

如果參數(shù)為 NaN,則結(jié)果是表示實(shí)際 NaN 值的整數(shù)。與 floatToIntBits 方法不同,floatToRawIntBits 不壓縮所有將 NaN 編碼為一個(gè)“規(guī)范”NaN 值的位模式。

在所有情況下,結(jié)果都是一個(gè)整數(shù),將其賦予 intBitsToFloat(int) 方法將生成一個(gè)與 floatToRawIntBits 的參數(shù)相同的浮點(diǎn)值。


查看完整回答
反對(duì) 回復(fù) 2018-08-06
  • 1 回答
  • 0 關(guān)注
  • 2238 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)