當前位置:編程學習大全網 - 編程語言 - c #中的聯合公共體

c #中的聯合公共體

Int在32位編程環境下是32位,在16位編程環境下是16位。

由於X86機器使用LE符號,

因此

32位環境下int的100在內存中實現為64 00 00 00。

因為聯合數是8個字節,理論上或形式上,

其他未指定的位應該是0,所以

對於聯合編號,它在內存中是64 00000000000。

在100位環境中,int的100在內存中表現為64 00。

對於聯合編號,它在內存中是64 00000000000。

所以雖然對於32位或者16位int,在內存中的表現是不壹樣的。

但在聯數環境下,表現是壹樣的。也就是說,不管

32位int或者16位int給聯合體帶來的變化是壹樣的。

Double無論16位環境還是32位環境都是8字節。和64000000000000000000000000000000

代表double的值是多少?

64 00 00 00 00 00 00 00

二進制是010000000 0.....沒有le符號,就是。

(省略56個零)01000000

內存中表示的double是

根據機器中浮點數的ieee二進制表示

符號位是第壹位,它是0,代表壹個正數。

指數位是符號位之後的11位,顯然也是0。

這裏需要從1023中減去指數位,所以指數位實際上是-1023。

尾數位是1。(44個零)01000000大約等於1(註意那個小數點)。

所以這個雙數的確切值應該是無限接近於0。它非常小,這意味著它應該是0。

有關詳細信息,請參考IEEE雙精度符號。

妳的結果和書上的不壹樣的原因是,

第壹個賦值給int類型並計算double,壹個union占用8個字節,

妳只給了四兩,其他人沒給怎麽辦?

不同的編譯器對如何處理其他字節有不同的標準。

所以在編程中通常使用結構包括union時,會有壹個用memset清0的操作。

比如:

工會編號值;

memset(& amp;value,0,sizeof(聯合數));

value . x = 100;

如果是這樣寫的話,我認為無論什麽編譯器,什麽環境,當value.x=100時,value.y壹定是0。

至於value.y=100.0,應該是滿8字節,所以int是16還是32位很重要。如果是16,後2個字節有效,如果是32位,後4個字節有效。

100.0的內存表示,40 59 0000000000的非LE(或BE)表示。

最後四個字節是0。理論上32位或16位value.x的結果應該是0。

至於妳為什麽會得到1079的號碼...,我還沒想到。。

  • 上一篇:理性是什麽意思(當壹個人被稱作理性的時候)
  • 下一篇:相同的卡特彼勒編程
  • copyright 2024編程學習大全網