السلام عليكم
أريد أن أقرأ متغير من النوع int على انه unsigned و هذه محاولتي:
#include<stdio.h>
int main()
{
int num;
printf("num=");
scanf("%u",&num);
printf("%u\n",num);
return 0;
}أين الخطأ !؟
السلام عليكم
أريد أن أقرأ متغير من النوع int على انه unsigned و هذه محاولتي:
#include<stdio.h>
int main()
{
int num;
printf("num=");
scanf("%u",&num);
printf("%u\n",num);
return 0;
}أين الخطأ !؟
ولم لا تستخدم unsigned في تعريف نوع المتغير ؟؟ ليصبح:
unsigned int num;
اقتباسولم لا تستخدم unsigned في تعريف نوع المتغير ؟؟ ليصبح:unsigned int num;
جربت هذا الكود بس ما نفع ! :
#include<stdio.h>
int main()
{
unsigned int num;
printf("num=");
scanf("%u",&num);
printf("%u\n",num);
return 0;
}أين المشكلة !؟
إيه المشكلة اللي بتظهرلك بالظبط؟
عندما نقرأ العدد على أنه unsigned و نُدخل عدد سالب ما الذي سيحدث !؟
هل سيتم تخزين القيمة بداخل المتغير أم ...!؟
تم تعديل هذه المشاركة بواسطة khaled_prg في 2 أغسطس 2010 في 16:07
لا حول و لا قوة إلا بالله
أين أنتم يا أعضاء المنتدى !؟
أنا بحاجة ماسة إلى مساعدتكم :blush:
تم تعديل هذه المشاركة بواسطة khaled_prg في 2 أغسطس 2010 في 16:07
إنظر يا خالد...
أنا أعتقد التالي:
ما الفرق بين ال singed و ال unsigned ؟؟
الفرق فقط ليس في تمثيل البيانات, و إنما في معناها ....
فمثلا لو أن لدينا short به ال bits التاليه:
11111001 فلو أردنا أن نرأه على إنه signed فهذه القيمة = -6 (the 2's complement ل 6)
أما لو أردنا أن نقرأه على أنه unsigned فإن القيمة = 65530
نفذ المثال التالي:
#include <stdio.h>
int main(void)
{
unsigned short x = -6;
printf("%hu %hi\n", x, x);
getchar();
return 0;
}اقتباسأين أنتم يا أعضاء المنتدى !؟
احنا هنا مين بيدور علينا :).
اخى خالد، اسئلتك جميله و لكنها Low Level و حيث ان شرحها يطول لذا تجد من الصعب الشرح لأنك بحاجة ان يكون لديك درايه بترميز الأرقام داخل الذاكره، عموما إذا كان لديك الرقم -25 و تريد معرفة ما الرقم الذى سيتم طباعته إذا تم التعامل معه كرقم بدون اشارة نفذ الكود التالي:
unsigned x = (unsigned)-25;
و الله ولي التوفيق
تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 2 أغسطس 2010 في 19:00
مدونتي: C++ Tips and Tricks
السلام عليكم
اقتباسأما لو أردنا أن نقرأه على أنه unsigned فإن القيمة = 65530
من أين أتت تلك القيمة !؟
و لماذا لم تتغير القيمة -5 حينما قمنا بتخزينها في المتغير num مع أن النوع unsigned!؟
---------------------------
اقتباساحنا هنا مين بيدور علينا :)
:) :) :)
اقتباساخى خالد، اسئلتك جميله و لكنها Low Level و حيث ان شرحها يطول لذا تجد من الصعب الشرح لأنك بحاجة ان يكون لديك درايه بترميز الأرقام داخل الذاكره
أنا أعرف ترميز الأرقام داخل الذاكرة و لكن لدي اختلاط في معلوماتي :blush: و أريد منكم التوضيح و أنتم أهل لذلك :wink:
اقتباسإذا كان لديك الرقم -25 و تريد معرفة ما الرقم الذى سيتم طباعته إذا تم التعامل معه كرقم بدون اشارة نفذ الكود التالي:unsigned x = (unsigned)-25;
نفذت الكود وظهر الرقم -25 !!!!
----------------
إذا كان لدينا متغير من النوع unsigned هل يمكنه احتواء عدد سالب !؟
تحياتي العطرة :wub:
تم تعديل هذه المشاركة بواسطة khaled_prg في 2 أغسطس 2010 في 19:16
اقتباسمن أين أتت تلك القيمة !؟
يوجد اكثر من تفسير لها سأذكر لك ابسطهم، الرقم هو -6 و ليس -5.
إذا قمت بالتركيز قليلا ستجد ان الرقم الذى استخدمته هو -6 و الرقم الناتج هو 65530، ماذا يمكن ان نستنتج من هذه الأرقام؟
النوع unsigned short يستطيع تمييز الأرقام فى المدى من 0 و حتى 65535 و هذا يعنى انه يستطيع تمييز 65536 رقم.
إذا قمت بجمع القيمه المطلقه للرقمين سيكون الناتح 65536 و كما ترى هذا هو عدد الأرقام التى يمكن استخدامها مع النوع unsigned short. عملية التحويل من رقم سالب لموجب يمكن ان تتم عن طريق المتمم بمعنى ان النوع byte اقصى رقم له هو 255 لذا اذا قمت بحفظ الرقم 5- داخله بشكل تلقائى سيتم حفظ المتمم له و هو 251 و هذه العمليه تتم عن طريق احضار اقصى قيمه يمكن ان يحتفظ برقها النسخه الموجبه لهذا النوع و يتم اضافة إليها واحد ثم يتم حذف قيمة الرقم السالب منها (طرحها)، الرقم الناتج من هذه العمليه سيكون المتمم للرقم السالب.
انظر هذا المثال:
int main()
{
short s1 = -20;
unsigned short u1 = (unsigned short)~0 + 1 + s1;
short s2 = u1;
}المتغير s1 يحتوى على الرقم السالب و المتغير u1 يتم حفظ بداخله المتتم الخاص بالرقم الموجود بـ s1 بعدها يتم تحويل الرقم المحفوظ بالمتغير u1 إلى النسخه السالبه و ذلك عند حفظا بالمتغير s2.
توجد عدة طرق لتحويل رقم س%Cلم8 لما يقابله داخل نوع موجب فقط، هذه احداها.
اقتباسنفذت الكود وظهر الرقم -25 !!!!
أين ظهر، المتغير x مستحيل ان يحتوى على الرقم -25؟
و الله ولي التوفيق
مدونتي: C++ Tips and Tricks
جزاكم الله خيرا :) , الآن اتضحت الفكرة :wink:
---------------
اقتباسالمتغير x مستحيل ان يحتوى على الرقم -25
ظهر لي العدد -25 لأنني استعملت الرمز %d !! و كان من المفروض أن استعمل الرمز الخاص بالمتغيرات الموجبة و هو %u,
عافاكم المولى و زادكم من فضله :wub: