有個C語言題目,請大家幫幫忙,謝謝

時間 2021-05-04 18:24:41

1樓:◆江城子

0x12345678=0001 0010 0011 0100 0101 0110 0111 1000

按低位儲存,八位一個位元組,應該是b

2樓:匿名使用者

lz程式環境 tc下,

union

r, *s=&r;

一個聯合中的資料成員在記憶體中的儲存是互相重疊的,每個資料成員都在相同的記憶體地址開始。它們共享同一塊記憶體。union的長度為其內最長成員的長度,本題來說,在tc環境下是4個位元組。

並且聯合的儲存是:

低地址存高位位元組,高地址存低位地址。

0x12345678=0001 0010 0011 0100 0101 0110 0111 1000

八位一個位元組,剛好4個位元組。

按照儲存原則,在讀取這塊記憶體的時候,s->c[0]指向的地址塊的編碼實際上是 0111 1000 所以輸出 0x78;

假如輸出s->c[1]指向的是 0101 0110 輸出 0x56;

假如輸出s->i[0]指向的是 0101 0110 0111 1000 輸出5678;

假如輸出s->i[1]指向的是 0001 0010 0011 0100 輸出 1234;

環境是tc,如果在c++下面,鑑於現在的機器都是32位了,int變為了4個位元組,所以此時這個union的長度變為了8個位元組;

3樓:

在windoes下選b

其它的就可能不是這個答案了

主要是由機器存放位元組的順序來決定的

4樓:匿名使用者

~~~~~~~~~~

5樓:

答案是b,分析如下:聯合體r變數k是長整形佔32位4個位元組,最大數為+2147483647,s->k=0x12345678;給k附值,其中一個十六進位制數佔4位,因為儲存是從低位開始且一個位元組一個位元組,即78,56,34,12正好存滿。s->c[i]是以位元組為單位讀取,所以c[0]就是第一個位元組78,如果s->c[4]會輸出s->c[4]free;說前本人已在tc上驗證。

這種題在c二級上常見。 謝謝觀讀!!

6樓:匿名使用者

你定義的共用體型別union 包含3個成員變數,成員變數它們的起始地址都是相同的,成員變數不是順序的儲存,是疊放在一起的,其中i 陣列佔4個位元組,k 變數佔4個位元組,c陣列佔2個位元組,共用體型別的長度為最大成員所佔空間的長度4個位元組,定義的 r變數是共用體型別的變數,s是指向r變數的指標,執行s->k=0x12345678;是對r變數中的k 成員進行賦值,0x12345678的字首0x表示該資料是16進位制的資料,因此每兩個數就佔1個位元組,按照低位元組存在低地址原則,78應該存入r變數的第一個位元組,56存入第二個位元組,34存入第三個位元組,12就存入第四個位元組,printf(%x\n,s->c[0]);的含義是按16進位制形式輸出s->c[0]中的資料,也就是r變數中的第一個位元組,即78。故選 b.

7樓:匿名使用者

#include

main()

r,*s=&r;

s->k=0x12345678;

printf("%x\n",s->c[0]);

} //題目有點語法錯誤

資料在記憶體中是以二進位制儲存的

0x12345678儲存為

10010001101000101011001111000而c[0]正好指向r所佔記憶體的最後8位即01111000二進位制的01111000以16趕製輸出,結果就是78

8樓:飄渺世間天

看機器了,在我的機器上int和long一樣是32個位(bit),char是8個位,而聯合體中的儲存空間是依聯合中佔位最多的型別來決定其儲存空間的,該聯合中int[2]共佔64位,long佔32位,char[2]佔16位,int[2]是佔的最多的,所以這個聯合體佔用的記憶體就是64位,所有資料共用這一塊64bit的記憶體。

16位數的每一位數相當於2進位制的4個位,所以2位數就佔8位也就是一個位元組(byte)(12,34,56,78各佔一個位元組),所以當:

s->k = 0x12345678時,

這塊64bit的記憶體的內容就是 0x????????12345678,問號代表沒有用到的位元組。

由於一個char佔8位,也就是一個位元組,資料從低位向高位儲存,所以c[0]的內容就是0x78,c[1]的內容就是0x56,(i[0] = 12345678,i[1]內容不確定),所以這一句:

printf(「%x\n,s->c[0]);

就以16進位制的方式列印出了一第個8位儲存空間中的內容,也就是0x78,效果同:

printf("%x\n",s->i[0] << 24 >> 24);

9樓:匿名使用者

程式修改如下,就能按你的要求輸出!

你設定的聯合有4位元組長,所以要設定c[4],要輸出最高位,在第4位元組是c[3],否則不能顯示"12"

#include

main()

r, *s=&r;

s->k=0x12345678;

printf("%x\n",s->c[3]);

printf("%x\n",s->c[0]);

printf("%x\n",s->i[1]);

printf("%x\n",s->i[0]);}

10樓:

我還暈哦

你寫**的格式真是爛的很捏

這題的答案比較複雜

你這4個如果一定要選的話只有b靠點譜!

11樓:玲ぺぅ瓏

跟本是題目錯了嘛。蒙人你啊。

沒答案。

12樓:

溢位了在編譯器裡面輸入sizeof(long),就可以看到long能夠佔用的位元組數,如果給他賦的值超過它佔用的位元組數,就會跑到後面的記憶體地址裡面,這裡是s->c,於是s->c的顯示值就應該是0x12345678的後面幾位,因此答案是b

一道c語言的題目請各位幫幫忙,急得很,先謝謝大家了!!!

13樓:不但而且要怎樣

最後一抄個if裡面的判斷語句存在邏輯襲錯誤,因為a&&b,只要a是錯bai的系統就判定為錯du

,你後面加的zhi||就不管用了dao,你可以再新增幾個括號把條件組合起來,或者先把h,min,s排序

int a;

if(h>m)

if(m>s)

if(s

然後再判斷情況會簡單很多

14樓:匿名使用者

****可以看清楚,但題目**太模糊了。建議題目有文字發上來。

一道c語言的題目,請各位幫幫忙急,急得很!!先謝謝各位!!

15樓:自我程式設計

語法沒發現問題,如果你說的是邏輯問題,那隻能你自己核實,沒有註釋,不明白你這個**想實現什麼功能,除了賦值就是判斷,我看那個很長的與或組合的條件語句,你邏輯上有沒有理對,如果條件太長,你可以考慮把單個條件用變數接收,最後再用變數組條件句,可能會清晰點

16樓:

沒有發現什麼錯誤。你有什麼問題?

一道c語言題,請大家幫幫忙,謝謝,求詳解啊

一道c語言題,請大家幫幫忙,謝謝,求詳解

17樓:匿名使用者

a錯誤,p++即p=p+1;向後移動一個儲存單元,因為16位編譯系統上,int佔兩個位元組

18樓:二麻子

選a,當指標++是都是移動一個儲存單元.....16位作業系統,這裡也就是加了一個int 2個位元組...然後p就指到a[1]了...

c語言的程式設計題目,請高手幫忙!謝謝

第一題 從鍵盤輸入任意兩個正整數x和y,程式設計求出兩數的最大公因子和最小公倍數 include int main void a 0 b 0 for i 2 i x y i if a 0 printf d 和 d 沒有公因子。最小公倍數是 d。n x,y,b else printf d 和 d 的最...

c語言請編寫程式來幫,c語言 請編寫一個程式來幫

right prompt wrong prompt 求幫忙編一個c語言程式 本來想著給你答一下。結果發現太遲了,只是編寫了一些 你看一下。如果能用就用。還沒編譯過。一定有很多問題吧。一般 只是參考一下。或可這麼做。include define maxsize 1024 int store maxsi...

一道c語言程式題目,大家幫忙哦 分數

include include struct worker void find worker name worker w,int n,int first,int last void main printf 排序後 n for int j 0 j 10 j for int q 0 q 10 q int...