الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

signed and unsigned

بدأه yahya91 في 12 أغسطس 2010 · 3 رد · 614 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

قبل الدخول في موضوع الإشارات من الجيد التذكير بالعد الثانئي و العشري مثال :

ليكن لدينا العدد

2894 =(4*1)+(9*10)+(8*100)+(2+1000)

نلاحظ أن كل خانة تزداد عن سابقتها بمضاعفات العشرة و ذلك لأنه يوجد في النظام العشري 10 أعداد تمثله و كذلك في النظام الثنائي فلو كان لدينا العدد

01110101110110 = (0*2)+(1*4)+(1*8)+(0*16)+(1*32)+(1*64)+(1*128)+(0*256)+(1*512)+(0*1024)+(1*2048)+(1*4096)+(1*8192)+(0*16384)

فزادت كل خانة عن سابقتها بمضاعفات الـ2

و بالتالي التحويل من النظام الثنائي إلى العشري يتم كما سبق .

و التحويل من العشري إلى الثنائي يتم بالشكل التالي و بشكل عكسي للعملية السابقة :

post-217808-069915600 1281561586_thumb.j

للتأكد:

10111001
= (1*1)+(0*2)+(0*4)+(1*8)+(1*16)+(1*32)+(0*64)+(1*128)
=1+0+0+8+16+32+0+128
=128+57
=185

signed and unsigned

ذات إشارة أو دون إشارة

لاحظ أننا لم نورد ذكر الإشارة السالبة في المقدمة السابقة و لكن هل تعتقد أن الأمر يحل بإشارة سالب فقط ؟، طبعاً لا فهناك خوارزمية لتحويل العدد من الموجب إلى نظيره السالب و هي :

قلب جميع احتمالات البتات إلى معاكسها و إضافة واحد ، مثال :

(5+)=0101 0000

1010 1111

1011 1111 =(5-)

كما نعلم و بما أن مثلاً البايت byte و هو ثمانية بتات و بالتالي 256 احتمال فإنه من العدل جعل نصفها للتمثيل السالب و النصف الآخر للموجب و بالتالي هذا البايت هو عبار عن المجال 0-127 موجب ومن 1 إلى 128 سالب و هكذا بالنسبة لباقي المساحات .

ومن هنا أستطيع أن أعتقد أن المجالات التي ترفق في كل كتاب تعليمي للمتحولات أصبحت معروفة[1] :

post-217808-076064700 1281561601_thumb.j

1- الجدول من كتاب :c plus plus introduction

و هذا كل ما يقصد من signed بشكل عام

المرفقات
EasyCapture1.jpgEasyCapture2.jpg

تم تعديل هذه المشاركة بواسطة yahya91 في 12 أغسطس 2010 في 00:33

3 −1
#2

مقال جميل ومفيد ، وشيء جميل ذكرك لمصدر تلك الصورة : ) ، ومن الصورة يتضح أن النوع long عديم الفائدة بوجود int ؟ لكن لا أظن هذا صحيحاً على كل الأنظمة ( لست متأكداً ) .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3
اقتباس
ومن الصورة يتضح أن النوع long عديم الفائدة بوجود int ؟ لكن لا أظن هذا صحيحاً على كل الأنظمة ( لست متأكداً ) .

هل أحجام الـtypes معرّفة في الـStandard ؟

الأمر يعتمد على الـCompiler والذي بدوره يعتمد على الـPlatform المحدّد .

2

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#4
اقتباس

هل أحجام الـtypes معرّفة في الـStandard ؟

الأمر يعتمد على الـCompiler والذي بدوره يعتمد على الـPlatform المحدّد .

+1

الـ Standards لا تحدد حجم معين لأنواع البيانات و لكن تحدد مدى معين من الأرقام ليتم تمثيله بها و كذلك قواعد معينه لأحجام انواع البيانات التى يتم تمثيلها بالذاكره.

*********************

يا G، سيبك من الـ A و تعالي عندنا فى الـ C :lol:

2

مدونتي: C++ Tips and Tricks

مواضيع مشابهة