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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

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

1 回答

?
人到中年有點甜

TA貢獻1895條經(jīng)驗 獲得超7個贊

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

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

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

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

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

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


查看完整回答
反對 回復 2018-08-06
  • 1 回答
  • 0 關注
  • 2224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號