PDA

View Full Version : مبتدی: یک سوال ساده در مورد c ( تبدیل نوع داده ها)



naser67
شنبه 21 شهریور 1388, 15:00 عصر
سوالم مربوط به تست کنکوره

در برنامه زیر خروجی کدام است ؟


main()
{ int a=353; char b=a;
printf("\n %d%c%c%d",a,a,b,b);}

گزینه ها



1)97aa97 2)343GG97 3)353GG353 4)353aa97



جواب گزینه 4 میشه
چون متغیر b از نوع char هست و چون علامت داره رنجش از -128 تا +127 و چون 353 از این رنج بیشتره باید تبدیل به باینری بشه و 8 بیت اولش رو جدا کنیم و تو متغیر b بریزیم
حالا مشکل من اینجاست من 8 بیت اول رو درآوردم 01100001 از اونجایی که تو کتاب توضیح داده چون متغیر b علامت داره باید متمم 2 ازش بگیریم ولی تو جواب تشریحی این کار رو نکرده

می خواستم در مورد اینگونه تبدیل کردنها یه توضیح مختصر بدید

ممنون

deopen
شنبه 21 شهریور 1388, 15:26 عصر
چون متغیر b از نوع char هست و چون علامت داره رنجش از -128 تا +127 و چون 353 از این رنج بیشتره باید تبدیل به باینری بشه و 8 بیت اولش رو جدا کنیم و تو متغیر b بریزیماصلاح میکنم , فکر میکنم رنج char از 0 تا 255 است , و چون 353 از اون بیشتره میشه پس دور میزنه یعنی 353 منهای 255 که میشه 97 یعنی a

naser67
شنبه 21 شهریور 1388, 16:13 عصر
اصلاح میکنم , فکر میکنم رنج char از 0 تا 255 است , و چون 353 از اون بیشتره میشه پس دور میزنه یعنی 353 منهای 255 که میشه 97 یعنی a

در مورد رنج که مطمینم با علامت -128 تا +127 و بدون علامت 0 تا 255 تو مثال بالا تو unsigned نزاشته پس علامتدار حساب میشه

deopen
شنبه 21 شهریور 1388, 19:56 عصر
در مورد رنج که مطمینم با علامت -128 تا +127 و بدون علامت 0 تا 255 تو مثال بالا تو unsigned نزاشته پس علامتدار حساب میشه

بله درسته .


حالا مشکل من اینجاست من 8 بیت اول رو درآوردم 01100001 از اونجایی که تو کتاب توضیح داده چون متغیر b علامت داره باید متمم 2 ازش بگیریم ولی تو جواب تشریحی این کار رو نکرده

ببینید دوست عزیز , گفتم عدد را باید منهای 255 میکردید ولی الان میگم عدد را منهای 256 بکنید , حواسم به صفر نبود , البته من سوال شما را درست حسابی نفهمیدم چون با printf اشنا نیستم ولی جوابی که دادم همیشه وقتی که عدد از 127 بزرگتره جواب میده .

deopen
شنبه 21 شهریور 1388, 20:00 عصر
#include<iostream>
using std::cout;
using std::endl;

#include<conio.h>

#include<cstdio>
using std::printf;


int main()
{
char a[2];

a[1]=NULL;
a[0]=129;

cout<<(129-256)<<" "<<a<<endl;

a[0]=880;

cout<<(((880-256)-256)-256)<<" "<<a;


getch();

return 0;
}