當前位置:首頁 » 便宜好貨 » 為什麼共用體變數輸出的值不一樣

為什麼共用體變數輸出的值不一樣

發布時間: 2023-05-28 00:19:24

㈠ C\C++聯合體(共用體)數值問題,高手請進!高分配英雄!

共用體的特慎森點時,同一個共用體內的各個變寬逗畝量的地址相同。以這個為例,a,b,c及x的變數地址是相同的,比如在我的VC2008的顯示地址是0x0012ff60。x所佔的位元組就等於a\指稿b\c里佔位元組最大的,也就是a和b,都佔4個位元組,那麼x也佔4個位元組。x的值是100。也就是說下面這樣。
0x0012ff60 64
0x0012ff61 00
0x0012ff62 00
0x0012ff63 00
那麼a的值也是100,確切的說是0x00000064 ,也就是10進制的100. c佔一個位元組,應該為0x64,也就是10進制的100.
b是浮點型,他在內存中存放和整形不一樣。浮點數據在內存中的存放方式比較復雜,不好理解。
你可以在網上查下。

根據IEEE的標准,浮點數的定義如下
符號位 指數位 小數部分 指數偏移量
單精度浮點數 1 位[31] 8位 [30-23] 23位 [22-00] 127
雙精度浮點數 1 位[63] 11 位[62-52] 52 位[51-00] 1023
把0x00000064換成4位元組32位的二進制看下
00000000 00000000 0000000 01100100
第32位是符號位,0是正,1是負
30-23位是指數,
22-0位是小數。

不知道TC環境下為什麼是0.000,沒有裝TC ,不過1.4013e-043近似值是0.0000

㈡ 共用體變數

共用體實際共用的是同一塊存儲地址(看哪個變數類型大,最大類型的變數確定了地址的大小),比如int a,與long long b,假設int是4位元組,long long是8位元組,那麼地址位數就是按8位元組分配的,假設b的8位元組的起始位絕塵置是0x0000,末位置是0x0007.那麼a的起始地址是0x0000,末地址是0x0003。當你對任意一個變數賦值槐鎮時都可能會改變a或b的值(因為共用同一塊地址,比如對a賦值,如果前四位地址存儲的數據不變,那麼b就不變,對於b也是同樣的道理),a,b的值都能讀出來,因為分配了內存,只不過讀出來的值可能和你預期的不一樣而已。所以共用體的值都是以最後鉛宏粗一次對那個變數賦值為准。

㈢ c語言共用體輸出問題

這個是共用體的問題
由於共用體共用同一段起始內存的地址,所以後一次的數據寫入可能會覆蓋前一次的數據
然後lz這道題,如果系統將int做2直接處理(比如TC2)的話,結果是380039和9;如果是按4位元組處理的話,結果應該是39和9

下面針對lz的結果,講一跡棚虧下2位元組處理的情況
第一姿神個共用體成員是int的數組,兩個元素,和運共4位元組
第二個成員是long,4位元組
第三個成員是char數組,4個元素,4位元組
所以這個union變數共4位元組
s.a[0]=0x39;
s.a[1]=0x38;
導致變數s的內存存儲的16進制數據(小尾存儲的話)高位到低位依次為為
00 38 00 39
所以才會導致輸出380039和9

4位元組處理的話,同理

熱點內容
為什麼眼睛看光有光束 發布:2025-02-05 12:20:24 瀏覽:495
為什麼安卓手機內存比蘋果內存容易滿 發布:2025-02-05 12:05:11 瀏覽:833
淘寶客為什麼比實體店便宜 發布:2025-02-05 11:49:22 瀏覽:199
脾胃不好為什麼不能吃香芋 發布:2025-02-05 11:48:31 瀏覽:841
為什麼每天早上晚上都要刷牙 發布:2025-02-05 11:46:51 瀏覽:97
長明燈為什麼能那麼長時間還燒 發布:2025-02-05 11:44:01 瀏覽:504
為什麼孩子晚上醒了就要吃 發布:2025-02-05 11:32:54 瀏覽:102
為什麼男人會迷上健身 發布:2025-02-05 11:32:04 瀏覽:361
為什麼晚上愛胡思亂想睡不著著急 發布:2025-02-05 11:31:29 瀏覽:560
宿管阿姨為什麼對男生態度好 發布:2025-02-05 11:15:00 瀏覽:973