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

سؤال للمحترفين فقط

مغلق
بدأه the smart programmer في 7 يناير 2005 · 12 رد · 941 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
Data Types (32-bit) 
  
    
  
 Type                     Length  	Range    
 unsigned char       8 bit                  0        to     255 
 char                      8 bits     -128                       to     127 
 short int              16 bits    -32,768                  to      32,767 
 unsigned int        32 bits                 0                to      4,294,967,295 
 int                       32 bits     -2,147,483,648     to       2,147,483,647 
 unsigned long      32 bits                 0                to      4,294,967,295 
 enum                   16 bits    -2,147,483,648      to      2,147,483,647 
 long                     32 bits   -2,147,483,648       to      2,147,483,647 
 float                    32 bits     3.4 x 10 -38            to     3.4 x 10 +38 
double                  64 bits    1.7 x 10 -308           to    1.7 x 10 +308 
long double           80 bits    3.4 x 10 -4932        to     1.1 x 10 +4932 
near (pointer)       32 bits                   not applicable 
far (pointer)          32 bits                   not applicable

السؤال كيف يتم حساب ال Range لل folat , double , long double

أنا أستعطت أن أحسبه لل int , .....

السؤال الثاني عندما أستخدم long double في برنامج يكون ال Range مثل double تماما

لماذا؟

السؤال الثالث

يوجد varible type في البورلاند إسمه bcd و طوله 96 بت , فكم المدى ؟

تم تعديل هذه المشاركة بواسطة the smart programmer في 7 يناير 2005 في 09:37

#2

انا لم افهم قصدك بالضبط في حكاية المدى .. هل تقصد اقصى عدد يستوعبه النوع ؟؟ ان كان كذلك .. فمن الممكن استخدام المعامل SizeOf ..و الذي يستخدم للحصول على حجم نوع ما ..

المعامل SizeOf يعيد لنا كم بايت Byte يتطلبه هذا النوع .. و بالتالي نضع اعلى قيمة للبايت و التي هي 111111 .. اي كل الخانت بواحد .. و بعدها نحول العدد الثنائي الى عشري ..

هذا شيء على سريع .. !!

بنت اليمن ،،

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#3
اقتباس
هل تقصد اقصى عدد يستوعبه النوع ؟؟

نعم هذا ما أقصده

ولكن أنا أعرف حق المعرفة الدالة sizeof

اقتباس
المعامل SizeOf يعيد لنا كم بايت Byte يتطلبه هذا النوع

نعم بضرب عدد البايتات في 8 يعطينا عدد البتات المكتوبة في الجدول

اقتباس
بالتالي نضع اعلى قيمة للبايت و التي هي 111111 .. اي كل الخانت بواحد .. و بعدها نحول العدد الثنائي الى عشري ..

كلامك صحيح بالنسبة لل long , unsigned long , int , unsigned int , short int , char , unsigned char

ولكن للبقية غير صحيح

ومشكور على الرد والإهتمام

تم تعديل هذه المشاركة بواسطة the smart programmer في 7 يناير 2005 في 15:20

#4

السلام عليكم,

للتلخيص ولكي تكون عندنا قاعدة تصلح لجميع الأرقام يمكن أن نفهم الأمور كما يلي :

لمعرفة ما يمكن أن يتحمله أي نوع من الأرقام يكفي فقط أن نحسب 2 أس عدد البتات للرقم. وسأعطي مثالا بالنسبة ل 8 بت والقاعدة تبقى صالحة للبقية.

إذا كان الرقم من 8 بتات فيمكن أن يسع إلى 2 أس 8 أي 256 رقما.

وهنا يجب أن نعرف أيضا إذا كنا نهتم بالأرقام السالبة أم لا.

- إذا كنا نريد الأرقام بغير ساين يعني نريد الأرقام الموجبة مثلا فسيمكن أن نخزن كما سبق في 8 بت الرقم العالي هو 255 - قلنا من قبل 256 رقم وبما أننا سنبدأ من الصفر إذن سيكون الرقم الأكبر هو 255 -

- الآن نفترض أننا نريد الأرقام السالبة أيضا وهنا نعرف أن التقنية لهذا سيكون هو البت الأعلى أو الأخير ففي 8 بت سيكون البت الثامن وفي 16 سيكون 16 وهكذا. فإذا كان هذا البت يساوي 1 سنعتبر الرقم سالبا وإذا كان 0 سنعتبر الرقم موجبا إذن هنا سنخسر بت من بين 8 ليدل على الساين وما يبقى لنا لسعة العدد نفسه سوى 7 بتات ولهذا سيكون الرقم الكبير هو 2 أس 7 أي قيمة 128 رقما. وبما أننا سنبدأ الأرقام الموجبة من الصفر فسيكون أكبر رقم موجب هو 127 وبما أننا سنبدأ الرقم السالب من -1 إذن سيكون أصغر رقم سالب هو -128 . وهكذا تحصل على سعة كل رقم وكما تلاحظ أنها تتغير إذا كنا نريد سوى الأرقام الموجبة unsigned أو الإثنان معا وهنا السعة تقسم على 2 .

ويمكن أن تقوم بالطريقة نفسها لمختلف الأعداد.

إلى اللقاء.

#5

أولاً شكراً على الرد و الأهتمام

صحيح أنا أعرف هذه القاعدة ولدي كتاب يتكلم عنها

ولكن أنظر إلي float يحتوي على 32 بت أليس كذلك

وبما أنه singed إذن

2^31 = 2147483648

وكما قلت بما أنه سنبدأ من الصفر للموجب و من -1 للسالب إذن

= 2147483647 إلى -2147483648

ليس كما هو مكتوب حيث أنه = 3.4 * 10 ^ +38 إلى 3.4 * 10 ^ -38

ممكن توضح الطريقه لل float

وشكراً

تم تعديل هذه المشاركة بواسطة the smart programmer في 7 يناير 2005 في 21:25

#6

السلام عليكم

القاعدة صحيحة, ولكن في حالة ال-float لا تطبق القاعدة بهدا الشكل نظرا لان ال- float يتعلق بما يسمى ال- float point أي النقطة العشرية مما يعطيه مدى أكبر من 2^32

مع تحياتي

#7

شكراً علي الرد ولكن

هل تعرف طريقة حساب المدى لل float , double , long double

إذا كنت تعرف الرجاء شرحها

ملاحظة : جميعكم تحاولون الإجابة عن السؤال الأول فقط ولكن السؤال الثاني و الثالث..

صراحة السوال حيرني ولقد بحثت في كتب كثيرة ولم أجد الجواب

#8

سلام اخي the smart programmer .. سأحاول معك مرة اخرى في السؤال الثاني و الثالث :

اقتباس
عندما أستخدم long double في برنامج يكون ال Range مثل double تماما

لماذا؟

استغرب طبعاً ان يكون لهما نفس المدى حيث ان الاول يستغرق 10 بايت و الثاني 8 بايت .. و من الممكن ان تجرب الكود التالي حتى ترى ماذا اقصد .. حيث اني استخدم بورلاند 5.02 :

#include<iostream.h>
#include<conio.h>

void main()
{
cout<<sizeof(long double)<<endl;
cout<<sizeof(double);

getch();
}

اقتباس
يوجد varible type في البورلاند إسمه bcd و طوله 96 بت , فكم المدى ؟

عملت بحث في الـHelp و لم اجد اي معلومات عن هذا النوع .. و لكن ممكن تجد سعته من خلال ان ترفع 2 للأس 96 (بت) كما ذكر الأخ chik ,,

و تحياتي للجميع ..

بنت اليمن ،،

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#9
#include <bcd.h>
#include <iostream.h>
void main()
{
	bcd a=5;
   long double b= 3.4 *pow(10,308);
   long double c= 3.4 *pow(10,309);
   cout << a << endl << b << endl << c;
   cin >> a;
}

أنا أيضا أستخدم بورلاند 5.02

و ال bcd موجود في الملف bcpp.hlp سوف يكون في

C:\BC5\HELP

إفتح الملف ثم أبحث عن bcd

ولقد إستنتجت أن طوله 96 بت من الدالة sizeof

اقتباس
استغرب طبعاً ان يكون لهما نفس المدى حيث ان الاول يستغرق 10 بايت و الثاني 8 بايت .. و من الممكن ان تجرب الكود التالي

نفذي البرنامج وأنظري ناتج المتغير سي سوف يكون INF

المفروض أن يكون ناتج

c=3.4*pow(10,4000);

صحيح فكيف ب 309

وشكراً على الرد

تم تعديل هذه المشاركة بواسطة the smart programmer في 7 يناير 2005 في 22:45

#11

السلام عليكم

الصراحة لم أفهم شئ من الرابط ولكن إنظر الرابط التالي إذا كان هذا هو ما تريد

أن توضحه لي فهذا لا يؤثر على مدى ال float , double , long double

الرابط

ِشكلي تعبتكم معايا

وشكراً

#12

مرحباthe smart programmer.بالنسبة لتمثيل الأعداد الصحيحة الطبيعية فالطريقة سهلة و كما قلت هي لدبك في كتاب: عدد ثنائي يتكون من 32 بيت سيكون مداه هو (2 أس 31) -1.

لكن بالنسبة للأعداد غير الصحيحة الطبيعية: من Float و double و Long double فالعملية تختلف تماما. للأن عملية تمثيل هذه الأعداد تكون مشفرة.

فالعدد يخزن في 32 بيت لكن كل بيت له معنا. 23 البيتات الأولى تعبر عن هذا العدد مع نزع الفاصلة و الأس. البيتات الثمانية التي تليها(من 23 إلى 30) فهي تعبر عن قيمة الأس العشري. و البيت المتبقي و هو البيت رقم 31 فهو مخصص لإشارة هذا العدد

سأعطي مثال على شكل جدول أرجو أن يكون معبرا:

representation of a Floating Number in simple precision with 32bits:

  |     b31       | b30   .........b23  | b22 .....b0   |
  |1bit of signe  | 8bits:Exposant      |23bits: Mantiss|
  |<----1---------><---------8---------><------23------->
  |     s         |          E          |       F       |

the value of the normalized floating number is
 N = (-1)^S  x   f  x  2^E .
with 
- s is the value of the signe bit (one bit)
- f is the value of the mantiss set of bits(23bits)
- e is the value of the exposant set of bits (8bits)

for the floating point of 64bits (Double) the representation is:
 s:  1 bits
 e: 11 bits
 f: 52 bits


for the floating point of 80bits ( long Double) the representation is:
 s:  1 bit
 e: 15 bits
 f: 64 bits

(h)

تم تعديل هذه المشاركة بواسطة ikossan في 24 يناير 2005 في 00:06

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#13

السلام عليكم

شكراً أخي إيكوسان على إهتمامك

ولكن بعد البحث الطويل لقد عرفت الإجابة قبل أن تضعها

وهذا النظام يسمى نظام IEEE وأخر تطوير له هو 854

وأنا حاليا أتعمق في هذا الموضوع.

وبالنسبة للسؤال الثاني في فيجوال c أو فيجوال ++c وجدت أن long double و double

لهما الطول نفسه

وشكرا لك أخي إيكوسان ولكل الأعضاء الذين ساعدوني

هذا الموضوع مغلق.

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