View Full Version : سوال: چند سوال در مورد union و switch (تست)
javaweb341
پنج شنبه 13 تیر 1392, 18:12 عصر
با سلام دوستان
چنتا سوال داشتم
1.متغیر k چند بایت فضا حافظه را اشغال می کند
union {
int i;
double a,b;
long c;
} k;
k مجموع اندازه ی اون متغیرا می شه؟یا اندازه ی بزرگترین متغیر؟
2.خروجی تکه برنامه زیر چیست؟
int i=3;
switch(i&2) {
case 1 : cout << "A";
case 2 : cout << "B";
default : cout << "C";
}
3.پس از اجرای دستورات زیر a[0] و a[1] چند است؟
Union {
short int k; int i ; char a[10] ;} t; t.k=12
دوستان اینا تست بودن.لطفا جواب با کمی توضیح دهید
با تشکــــــــــــــــhttp://www.iranled.com/forum/images/smilies2/heart.gifــــــــــــــــــــ ر
UfnCod3r
پنج شنبه 13 تیر 1392, 18:55 عصر
1- اندازه ی بزرگترین متغیر
2-
0011
&
0010
=
0010
3-
a[0] a[1]
00000000 00001100 //12
a[0 میشه 0
a[1 میشه 12
بهتر بود خودت امتحان می کردی اینا ک سادس
MinusOne
پنج شنبه 13 تیر 1392, 19:36 عصر
شما کامپایلر ++C نداری ؟
فرید باباخانی
پنج شنبه 13 تیر 1392, 20:11 عصر
جواب سوال دوم،چون گفته شده i و 2 یعنی هردو شرط همزمان باید صدق کنند که چون این دو شرط وجود ندارند default اجرا شده و دستور مقابل آن نمایش داده میشود
javaweb341
پنج شنبه 13 تیر 1392, 20:14 عصر
3-
a[0] a[1]
00000000 00001100 //12
a[0 میشه 0
a[1 میشه 12
یونیون ساختمانی است که ادرس شروع کلیه عناصر ان از یک نقطه است
چرا a[1] شده 12 ؟
javaweb341
پنج شنبه 13 تیر 1392, 20:19 عصر
جواب سوال دوم،چون گفته شده i و 2 یعنی هردو شرط همزمان باید صدق کنند که چون این دو شرط وجود ندارند default اجرا شده و دستور مقابل آن نمایش داده میشود
نه دوست عزیز این خروجیش می شه BC
چون & اون دو عدد می شه 2
و یک نکته اینکه :
در عبارت های switch/case باید برای هر case یک break گذاشته! چون در غیر اینصوریت تمام شرطهای بعد هم درست فرض میشن!!!!!!
و جواب می شه BC
UfnCod3r
پنج شنبه 13 تیر 1392, 20:56 عصر
شما وقتی به k که 16 بیته 12 دادی k میشه
00000000 00001100
خب بایت سمت چپ a[0 هست و بایت راست هم a[1
omidshaman
یک شنبه 16 تیر 1392, 09:54 صبح
1-
a[0 میشه 0
a[1 میشه 12
من تست کردم بر عکس اون چیزی که گفتی میشه
چون 12 کمتر از 256 ه میره داخل همون خونه اول ارایه ذخیره میشه
یعنی مثلا اگر همچین چیزی بهش بدیم
00000010 00000011
توی خونه اول a میاد 11 رو ذخیره می کنه تو خونه دوم 10 رو
بعد خوب آخه کدوم ادم عاقلی همچین چیزی تعریف می کنه!؟
Union { short int k; int i ; char a[10] ;} t; t.k=12
omidshaman
یک شنبه 16 تیر 1392, 10:10 صبح
یک چیز جالبه دیگه هم داره مثلا اگر 507 به k بدیم
a[1] میشه 1 و a[0] میشه -5 :)
UfnCod3r
یک شنبه 16 تیر 1392, 10:52 صبح
اره ولی نه به اون دلیلی که گفتی
این مربوط میشه به Big Endian یا Little Endian پردازشگر
تو Little Endian بایت ها بر عکس قرار می گیرن واس همینه که جای a[0 و a[1 عوض شده بود
برای فهمیدن هم می تونید این کارو کنید
int num = 1;
if(*(char *)&num == 1)
{
printf("\nLittle-Endian\n");
}
else
{
printf("Big-Endian\n");
}
کلی در این مورد نوشتم تا امدم ارسال رو بزنم سیستم ریست شد :متعجب::گریه:
اخه اینم شانسه ما داریم
http://en.wikipedia.org/wiki/Endianness
http://cboard.cprogramming.com/c-programming/86186-big-endian-little-endian.html
omidshaman
یک شنبه 16 تیر 1392, 11:05 صبح
خوب پس تست کتابه اشتباست:)
منابع اموزشی در حد صفر... !
بعد این union بر چه اساسی ذخیره میشه که وقتی 507 میدیم بهش a[1] میشه 1 و a[0] میشه -5 ؟!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.