浮點型資料轉換和共用體

2021-10-04 09:20:15 字數 2397 閱讀 4756

如果已將數存入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.庫函式...