-1
我想知道是否有人可以請我解釋爲什麼&該代碼的工作原理,將-1.0和+1.0之間的雙精度轉換爲14位整數。爲什麼&這個「double」到「14-bit Int」代碼是如何工作的?
data14中的值如何選擇,以及幕後發生了什麼?
double data = 0.5;
if (data < -1.0) {
data = -1.0;
} else if (data > 1.0) {
data = 1.0;
}
int data14 = (int)((data+1.0)/2.0*16383 + 0.5);
BYTE upper7 = data14 >> 7;
BYTE lower7 = data14 & 0x7f;
你知道位移和位掩碼是什麼嗎?如果不是,先學習,然後回到這個。好,現在好嗎?如果記住十進制16383是十六進制0x3FFF,這是二進制11111111111111,即14個連續位,則可能有助於理解此代碼。它也有助於使用你的調試器查看'data14'的任何給定值的'data'的原始字節,做數學來理解爲什麼'data14'被設置爲它的方式(例如,'0.5' - >' '12287'又名'0x2FF'),並在紙上寫出爲什麼按照原樣完成位移的原因。 –
如果有幫助:'-1.0'變爲'0','1.0'變成'16383'('0x3FFF',即最大14位)。該代碼將'-1.0..1.0'之間的浮點值轉換爲'0..16383'之間的十進制值。 –
將數據加1後的原因是什麼,將14位(0x3FFF)乘以2,然後加0.5? – Nop