如果已將數存入eeprom,要將其取出合併,方法也是一樣,可參考下面的程式。
#define uchar unsigned char#define uint unsigned int
void ctof(void)
;void *pf;
px=x;
pf=&a;
for(i=0;i<4;i++)
}ieee浮點數的存放格式
對於大小為32-bit的浮點數(32-bit為單精度,64-bit浮點數為雙精度,80-bit為擴充套件精度浮點數),
1、其第31 bit為符號位,為0則表示正數,反之為複數,其讀數值用s表示;
2、第30~23 bit為冪數,其讀數值用e表示;
3、第22~0 bit共23 bit作為係數,視為二進位制純小數,假定該小數的十進位制值為x;
則按照規定,該浮點數的值用十進位制表示為:
= (-1)^s * (1 + x) * 2^(e - 127)
對於49e48e68來說,
1、其第31 bit為0,即s = 0
2、第30~23 bit依次為100 1001 1,讀成十進位制就是147,即e = 147。
3、第22~0 bit依次為110 0100 1000 1110 0110 1000,也就是二進位制的純小數0.110 0100 1000 1110 0110 1000,其十進位制形式為0.78559589385986328125,即x = 0.78559589385986328125。
這樣,該浮點數的十進位制表示
= (-1)^s * (1 + x) * 2^(e - 127)
= (-1)^0 * (1+ 0.78559589385986328125) * 2^(147-127)
= 1872333
把所需要訪問的浮點數和乙個陣列(char i[4])構成乙個聯合,訪問的時候用陣列,使用的時候用浮點數,如下:
union myfloat
寫:eeprom_write(0,myfloat.i[0]);
eeprom_write(1,myfloat.i[1]);
eeprom_write(2,myfloat.i[2]);
eeprom_write(3,myfloat.i[3]);
讀:myfloat.i[0]=eeprom_read(0);
myfloat.i[1]=eeprom_read(1);
myfloat.i[2]=eeprom_read(2);
myfloat.i[3]=eeprom_read(3);
使用浮點數:
float k=myfloat.j;
在進行某些演算法的c語言程式設計的時候,需要使幾種不同型別的變數存放到同一段記憶體單元中。也就是使用覆蓋技術,幾個變數互相覆蓋。這種幾個不同的變數共同占用一段記憶體的結構,在c語言中,被稱作「共用體」型別結構,簡稱共用體。注:在某些書籍中可能稱之為「聯合體」,但是「共用體」更能反映該型別在記憶體的特點。
一般定義形式
union 共用體名
變數表列;
簡單示例
union data
a,b,c;
編輯本段
共用體變數的引用方式
只有先定義了共用體變數才能在後續程式中引用它,有一點需要注意:不能引用共用體變數,而只能引用共用體變數中的成員。
簡單示例
union data
a,b,c;
對於這裡定義的共用體變數a,b,c。下面的引用方式是正確的:
a.i (引用共用體變數中的整型變數i)
a.ch (引用共用體變數中的字元變數ch)
a.f (引用共用體變數中的實型變數f)
而不能引用共用體變數,例如:
printf("%d",a); <==這種用法是錯誤的。
因為a的儲存區內有好幾種型別的資料,分別占用不同長度的儲存區,這些共用體變數名a,難以使系統確定究竟輸出的是哪乙個成員的值。
而應該寫成
printf("%d",a.i); 或 printf("%c",a.ch);
編輯本段
共用體型別資料的特點
1.同乙個記憶體段可以用來存放幾種不同型別的成員,但是在每一瞬間只能存放其中的一種,而不是同時存放幾種。換句話說,每一瞬間只有乙個成員起作用,其他的成員不起作用,即不是同時都在存在和起作用。
2.共用體變數中起作用的成員是最後一次存放的成員,在存入乙個新成員後,原有成員就失去作用。
3.共用體變數的位址和它的各成員的位址都是同一位址。
4.不能對共用體變數名賦值,也不能企圖引用變數名來得到乙個值,並且,不能在定義共用體變數時對它進行初始化。
5.不能把共用體變數作為函式引數,也不能是函式帶回共用體變數,但可以使用指向共用體變數的指標。
6.共用體型別可以出現在結構體型別的定義中,也可以定義共用體陣列。反之,結構體也可以出現在共用體型別的定義中,陣列也可以作為共用體的成員。
共用體,列舉型
1 共用體 共用體由若干個資料型別組合而成。和結構體型不同的是,共用體資料中所有成員都占用相同的記憶體單元,設定這種資料型別的主要目的就是節省記憶體空間。union 共用體名 共用體變數名 例如 union data a,b,c 也可以將型別宣告與變數定義分開 union a,b,c 當然,也可以直...
共用體型別和列舉型
共用體型別和列舉型 1 共用體型別變數的定義 union 共用體名稱 2 共用體型別變數的定義 union 共用體名稱 共用體型別變數 注意,結構體變數所佔的記憶體長度是各成員所佔記憶體之和,而共用體變數則是各成員中最大記憶體者。3 共用體的引用 共用體型別變數 成員名 在引用時需注意,共用體變數中...
共用體 列舉型 指標 函式
共用體 union 共用體名 1.共用體所佔記憶體空間為包含的資料型別最大空間的值。2.某乙個時段,只有乙個資料是有效的,同時賦值,後面的屬性會覆蓋前面的屬性。列舉型enum 列舉名 1.內部是整型常量,從0開始。2.我們定義一系列的整型常量,減少魔鬼數字的使用。指標int main 函式1.庫函式...