問題如下:現(xiàn)有一二進制 整數(shù) 1111 而我要把它表示為十進制小數(shù)點后兩位有效數(shù)字?在DX18B20溫度小數(shù)轉(zhuǎn)換碰到的問題!要用最簡單直接的方法,不要出現(xiàn)2的負幾次方之類的轉(zhuǎn)換! 向高手求救謝謝!
補充問題:
用DS18B20精確到小數(shù)點后一位的溫度測量實現(xiàn)
DS18B20的測量溫度范圍為 -55°C~+125°C,在-10~+85°C范圍內(nèi),精度為±0.5°C
從DS18B20輸出的后4位就是小數(shù)點后的數(shù),其數(shù)值乘與0.0625就是實際的溫度,大家知道,在8位的51單片機中,做個乘法并不容易,而且DS18B20精度為±0.5°C,有的算法直接舍去從而精確到1°C
1,我看到有些程序用查表法確定精度,這是一個很好的方法!但查表法有它的弱點要列表!
2,也看到有同志用這樣的方法,
如果a是從18B20里讀來的低8位值
xiaoshu1 = (a&0x0f)*10/16; //小數(shù)第一位
xiaoshu2 = (a&0x0f)*100/16%10;//小數(shù)第二位
xiaoshu=xiaoshu1*10+xiaoshu2; //小數(shù)兩位
這里我就是弄不懂為什么是乘以十就是小數(shù)第一位 乘以一百就是小數(shù)第二位?
盡管精度是0.5C,沒有實際意義,但這種算法是有用的,就是不知道其原理?
所以引申問題:現(xiàn)有一二進制 整數(shù) N位 而我要把它表示為十進制小數(shù)點后M位(M<N)有效數(shù)字?該怎樣進行轉(zhuǎn)換?
實際中肯定會有類似問題! |