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

كيف يتعرف الكمبيوتر على الارقام

مغلق
بدأه AroSoft في 10 يونيو 2006 · 16 رد · 2,452 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخوتي الكرماء مبرمجي لغات البرمجه

يوجد امر حيرني جدا جدا جدا واظن ان لا احد سيجيبني عليه الا القليل ولكن اردت ان احاول طرح حيرتي لعلي اجد الاجابه الواضحه

الكود التالي :

if( num1 > num2) 
cout<< " the first number biger than from the second number";

ونفرض ان

num1=14

num2= 13

اي ان فعلا الرقم الاول اكبر من الثاني وبذلك ستطبع الجمله ولكن كيف قامت اللغه نفسها بمعرفة ان الرقم الاول اكبر ؟؟ ,, كيف تمت عملية ترجمه للكمبيوتر بان الرقم 14 اكبر من 13

كيف فهم الكمبيوتر ان الرقم 14 هو الرقم 14 في حياتنا نحن الانسان وكيف فهم ان الرقم 13 هو نفسه الرقم 13 في حياتنا

حقا هذا السؤال محيرني جداااااااا

ارجو الاجابه الواضح وشكرا

#2

لو عايز تعرف إذاي يبقى تقرا عن ال Microprocessors

ببساطة المعالج عبارة عن مجموعة سويتشات و بيقدر يقوم بالعمليات المنطقية و العمليات الحسابية طيب إذاي ؟؟؟

كل سويتش بيبقى في حالة واحدة إما ON و دي يعني 1 أو OFF و دي يعني 0

و لما تتعامل مع أمر الأسمبلي الخاص بالمقارنة إللي بتتكلم عنها فده بيخلي المعالج يغير عدة سويتشات يخليها ON و بالتالي كل سويتش بيغير مجموعة أخرى من السويتشات و كل سويتش من السويتشات بيغير مجموعة تانية و هلم جرا إلى أن تنتهي العملية و ببساطة بيتم إرجاع القيمة

لو بتتكلم عن التعليمة بتاعة المقارنة بالذات فأحسن تقرا عن ال Assembly و تعرف يعني إيه Jumps و Flag Register و بصفة عامة زي ماقلت أحسن تقرا عن ال Microprocessors ككل

#3

تسلم اخي

وارجو ان يزيد النقاش فانا ارى ان هذا السؤال مهم جدا لدى كل المبرمجين بكل المستويات فحتى المحترفين فيوجد المحترفين لا يعرفون الاجابه

#4

الكمبيوتر نظام متعدد الطبقات, و كل طبقة لها لغة تتفاهم بها و لها واجهة تتفاهم بها مع الطبقة التى تعلوها و الطبقة التى تدنوها.

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

الطبقة الثانية هى مجموعة الأوامر التى ينفذها المعالج Instruction Set و هذه الطبقة تفهم الإشارات الخاصة بالطبقة الأولى على أنها واحد و صفر فالواحد له إشارة و الصفر له إشارة أخرى, كما تقوم هذه الطبقة بتنفيذ بعض العمليات الأساسية على البيانات (ممثلة بالطريقة الثنائية ones&zeros) مثل الجمع و الطرح و الضرب و النقل و التدوير و هكذا.

الطبقة الثالثة هى المجمع Assembler و هو يحول الأوامر من الصورة المكتوبة بلغة الأسمبلى إلى الصورة الثنائية التى يفهمها البروسيسور.

الطبقة الرابعة هى نظام التشغيل Operating System و هو يقوم بالتحكم و تنفيذ كل النشاطات التى يقوم بها الحاسب و يتيح للمستخدم بإستخدام الهاردوير المتوفر عن طريق إتاحة واجهة للمستخدم باللغة التى يفهمها.

الطبقة الخامسة هى الكومبيلرز compilers التى تتيح لك ترجمة برنامجك إلى لغة الأسمبلى التى يفهمها ال assembler و هو بالتالى يحولها إيى binary لتنفذ على المعالج.

فأنت عندما تكتب 13 فى برنامجك الأسمبلر عندما يحولها إلى لغة ال binary تتحول إلى مجوعة من الأصفار و الواحد حتى تفهمها ال Instruction Set بتاعة المعالج و تقوم بالعملية المطلوبة.

أرجو أن تكون المسألة وضحت شوية.

#5

السلام عليكم ورحمه الله وبركاته

يا صاحبي بالنسبة للمعالج كيف يفرق ويعرف ان هذا الرقم اكبر من هذا الرقم

في الحاسابات هناك شيء يجيب انت تعرفة جيدا

وهو انه هناك النظام العشري وهو النظام المعروف في حياتنا اليومية

والنظام الثنائي والذي يستخدمه الحاسب كثيرا ويعتمد عليه المعالج

والنظام الست عشري كذلك يعتمد عليه المعالج ايضا ويتسخدم في الطابعات

وهناك ايضا النظام الثماني وقد قل استخدامه كثيرا

عندما تقول 14 و13

هذا نظام عشري

المعالج لا يفهم النظام العشري

انما المعالج يفهم النظام الثاني

صفر وواحد

مثل ما تفضل به اخي الكريم

فعندما تكون الحاله off هذا يعني 0 وعندما تكون الحاله on هذا يعني 1

لتكون الصورة امامك اوضح

لو اطلعت على التاريخ

تجد ان البحاره قديما كانوا يعتمدون على الاضاءة في علاماتهم

فمثلا عندنا تكون الاضاءه متقطعه مرتين تعني شيء وهذا يعني 101 اشتغلت انطفأت اشتغلت

مثلن اضيئت مرتين وانطفأت مرة واضيئت مرتين يعني 1010101

وهكذا

ولان النظام لا يفهم النظام العشري وهذا شيء طبيعي لانه مادة جماد

انما به التقنيه لكي يحول هذا الرقم من عشري الى النظام الثنائي حتى يفهم المعالج انك تقصد هذا الرقم

وهذا كلام باختصــار وسوف اتكلم عن هذا الموضوع بالتفصيل في كتابي ان شاء الله

تحياتي لك وارجوا ان اكون قد افدتك

#6
AroSoft كتب:
تسلم اخي

وارجو ان يزيد النقاش فانا ارى ان هذا السؤال مهم جدا لدى كل المبرمجين بكل المستويات فحتى المحترفين فيوجد المحترفين لا يعرفون الاجابه

لا يوجد محترف يجهل هذه الأشياء .. تعريقاً! (كما انه لا يوجد طيار محترف لا يستطيع قيادة الطيارات!)

اذا اردت معرفة هذه التفاصيل الدقيقة في عمل الحاسوب فأنت بحاجة الى دراسة مكونات الحاسوب (من ناحية الـ Hardware) و يمكن ايضا دراسة الـ Finite Automata و الـ Turing machines من اجل نظرة فلسفية حول تطبيق الخوارزميات الرياضية عن طريق الأجهزة و الالات (الغبية).

الكومبيوتر - في اخفض المستويات - لا يتعامل مع الأرقام و الحروف و الكلمات كما نتعامل بها نحن البشر .. بل يتعامل فقط مع رقمين: صفر و واحد. و هناك طرق من اجل تخزين و تمثيل الأرقام الأخرى عن طريق سلاسل من الصفر و الواحد (باستخدام نظام ارقام ثنائي, binary). و كذلك هناك طرق لتخزين الحروف على شكل ارقام, باستخدام انظمة للتشفير, مثل الـ ASCII للحروف الانجليزية او الـ Unicode لكل لغات العالم .. و طبعا لا يوجد شيء يمنع اي شخص من ابتكار نظام تشفير خاص به.

الموضوع طويل بصراحة .. لا تتوقع ان تستوعب كل شيء من خلال ردود الاخوة الاعضاء .. و لكن اعتقد ان تلك الردود ستعطيك فكرة أولية.

#7

اوك انا فاهم النظام الثنائي

ولكن كمان سؤال في نفس الفرع

كيف فهم الكمبيوتر ان هذا الرقم 0 وذاك 1 في النظام الثنائي

وكيف فهم ان الرقم 10 في النظام الثنائي عباره عن الرقم 2 في النظام العشري

#8
AroSoft كتب:
اوك انا فاهم النظام الثنائي

ولكن كمان سؤال في نفس الفرع

كيف فهم الكمبيوتر ان هذا الرقم 0 وذاك 1 في النظام الثنائي

وكيف فهم ان الرقم 10 في النظام الثنائي عباره عن الرقم 2 في النظام العشري

أولا الكومبيلر هو إللي بيحول جميع الأرقام للنظام الثنائي عند الترجمة علشان كده ممكن في سي بلس بلس مثلا تكتب رقم بالنظام السدس عشري أو الثماني أو العشري و في جميع الأحوال بيترجم في النهاية ل 0 و 1

أما بيتم تخزين الصفر و الواحد إذاي فده بيعتمد على وسيلة التخزين يعني مثلا في بعض الوسائط بتستخدم مجال كهرومغناطيسي و في بعضها بيتخزن بإستخدام أشعة ليزر بتعمل ثقوب لما يكون في 1 مثلا و تسيب لما يكون في 0 كما في ال CD

أما الكمبيوتر بيتعامل معاها إذاي فبيتعامل معاها على إنها إشارات كهربية الجهد الأعلى مثلا يعتبره 1 و الجهد الأدنى يعتبره صفر

ذي ما قال الأخ حسن الجودي الموضوع كبير

شرح إذاي بيشتغل المعالج عايز كتب كاملة لوحده

#9
usama707 كتب:
أما الكمبيوتر بيتعامل معاها إذاي فبيتعامل معاها على إنها إشارات كهربية الجهد الأعلى مثلا يعتبره 1 و الجهد الأدنى يعتبره صفر

ولكن كيف يفهم الكمبيوتر ان ال 1 هو الاعلي وان ال 0 هو الادنى ؟؟

والله شكلي مو راح افهم كدااا

ارجو من بعض االاخوه كتاب معين وشكرا

تم تعديل هذه المشاركة بواسطة AroSoft في 11 يونيو 2006 في 14:32

#10

http://www.allaboutcircuits.com

الموقع ده عبارة عن كتاب بيتكلم عن الدوائر الكهربية

و بالذات الجزء ده من الكتاب الخاص بالديجيتال ممكن يفيدك http://www.allaboutcircuits.com/vol_4/index.html

تم تعديل هذه المشاركة بواسطة usama707 في 11 يونيو 2006 في 15:34

#11
اقتباس
ولكن كيف يفهم الكمبيوتر ان ال 1 هو الاعلي وان ال 0 هو الادنى ؟؟

والله شكلي مو راح افهم كدااا

ارجو من بعض االاخوه كتاب معين وشكرا

أخى إذا كنت قرأت ردى السابق كنت حتعرف إن اللى بيفهم ال 0 و ال 1 دا هو ال Instruction Set بتاعة البروسيسور و هذه يتم تصميمها عن طريق ناس فالمصمم هو الذى يجعل ال IS دى تميز الواحد على إنه 5 فولت مثلا و الصفر على إنه -5 فولت.

#12

اها فهمت بعض الشيء

ولكن بهذه الحاله نحن لا نبرمج برامج بل نكتب اكواد جاهزه على طريقتنا الخاصه

هل يوجد كتاب مختصر بلغتنا المحبوبه اللغه العربيه عن هذا الموضوع ؟؟

اذا تواجد فارجو منكم التكرم باتعاب اصابعكم لكتابة اسمه

وشكرا

#13

اخي كملخص ... كيف يفرق ال 0 هو الاخفض و ال 1 هو علي الاعلي ؟ تحتاج إلي نظرة الكترونية حيث غالباً في الدوائرة الالكترونية يكون الجهد 0 اقل جهد في الدائرة و يعبر عن الحالة المنخفضة و عادة نعبر عن اعلي جهد جهد هو 5 فولت و هذا يختلف علي حسب النظام Cmos,TTL,Nmos..etc ...

اي كتاب من شعاع عن الدوائرة المنطقية الرقمية سيفي بالغرض ز

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#14

اوووك

شكرا لكم جميعا على الاجابات الممتازه

#15

احد الكتب الجميلة فى هذا المجال

http://www.amazon.com/gp/product/002800594...glance&n=283155

هو بداء الموحد و عمل كل الدوائر بنفسة الذاكرة و وحدة ااحساب و المنطق

اذا كنت فى مصر الكتاب موجود فى المكتبات التى امام كليات الهندسة

ممكن تدور علبة على النت

#16

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

بالنسبة للسؤال سؤال جميل بس بعتقادي انه سؤال هاردوير اكتر ماهو سؤال برمجي لذلك جميع الاخوة اللي جاوبوه جاوبه من ناحية برمجية بس السائل بدو الجواب من الناحية الهاردوير على كل الاحوال سأجيب باختصار وإن شاء الله سأوفق في شمل كل النواحي

اولا أخي بالنسبة للصفر والواحد فالاشارة الكهربائية بين 0-0.8 هي 1 منطقي والاشارة بين 3-5 هي صفر منطقي وكلمة منطقي اي ليس لها علاقة بالواقع ولكن كتمثيل لهذه الشارة من الناحية المنطقية

ثانية تنطلق جميع الدارات المتكاملة من صنعها من مبدأ البوابات وهي عبارة عن دارات تتالف من ترانزستورات تقوم بعمليات المنطقية وهي:or,and.nand,xor,xnorوغيرها

المهم في دارة تعرف باسم المشفرات تتالف من بوابات and و or اذا بدك بوضع المخطط التفصيلي للدارة المهم هذا المشفرات باختصار تقوم بتمميز حالةى دخلة واعطاءها حالة خرج معينة

وفي دارة تعرف باسم فاك شيفرة تقوم بالعكس اي تاخذ شيفرة معينة وتحولها الى خرج مميز

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

على كل الاحوال عند دخول اشارة الرقم من لوحة المفاتيح يخزن على هيئة نظام ست عشري في الرام بنتظار قدوم ضغطة المفتاح التالي وهي رقم ثلاثة مثلا لتكوين الرقم 13

بعدها يقوم المعالج بفتح خط معطيات مع الذاكرة databuss ويقوم بجلب هذين الرقيم الذين يصبحان رقم 13 ,وبنفس الطريقة يتم جلب الرقمين الباقين ليصبحان 12

الان كيف تتم المقارن بين هذين الرقمين طبعا يتعامل المعالج مع ثلاثة انواع من الخطوط databuss,addressbuss,controlbuss

يحتوي المعالج كاي دارة منطقية على دارات متكاملة تحوي على دارة حسابية تقوم بمقارنة الرقمين الداخلين (اذا بدك تفصيل في هذه الناحية انا كمان جاهز بس مشان الموضوع ما يطول وتدخل بأمور معقدة ) المهم تتعامل لغة البرمجة مع هذه الدارات على اساس الاسمبلي (مناطق وعمليات كالازاحة والتهيئة ومقاطعات والحجز)اذا بدكون بنزل موضوع عن الاسمبلي

طبعا الاسمبلي هي لغة البرمجة الاساسية للدارات المتكاملة واذا فهم كيف تعمل مع المعالج رح تفهم كيف اي برنامج ممكن يترجم وممكن تشاهد هذه العمليات في السي عن طريق f8-لكي تمشي بالبرنامج خطوة خطوة ثم ctrl+alt+c

وهي ستظهر بهذا الشكل

00401000 jmp 0x401012

الموضوع طويل بس برايي ليس بالضرورة لاي مبرمج ان يعرف هذه الامور لانها امور تختص بالهاردوير

ماذا أقول وفي فؤادي جمرة تزفو وفي العينين يزفو العمى شعب تولاه الخمول وأمة تمشي إلى الوراء بلا نظر هاقد شبعنا من كلام فارغ ومن القشور وغيرنا أكل الثمر فالعامل المسكين يقضي نحبه من جوعه وسواه من الأكل انفزر يا أمة ترجو الحياة شريفة كيف الوصول وبيننا الغش انتشر فكيف الحياة لنا تستجيب فهذا زمان قليل الحياء وهذا زمان جنون البشر

#17
AroSoft كتب:
السلام عليكم

اخوتي الكرماء مبرمجي لغات البرمجه

يوجد امر حيرني جدا جدا جدا واظن ان لا احد سيجيبني عليه الا القليل ولكن اردت ان احاول طرح حيرتي لعلي اجد الاجابه الواضحه

الكود التالي :

if( num1 > num2) 
cout<< " the first number biger than from the second number";

ونفرض ان

num1=14

num2= 13

اي ان فعلا الرقم الاول اكبر من الثاني وبذلك ستطبع الجمله ولكن كيف قامت اللغه نفسها بمعرفة ان الرقم الاول اكبر ؟؟ ,, كيف تمت عملية ترجمه للكمبيوتر بان الرقم 14 اكبر من 13

كيف فهم الكمبيوتر ان الرقم 14 هو الرقم 14 في حياتنا نحن الانسان وكيف فهم ان الرقم 13 هو نفسه الرقم 13 في حياتنا

حقا هذا السؤال محيرني جداااااااا

ارجو الاجابه الواضح وشكرا

العملية تكون كاتالي

num1 - num2= positive sign this means it is bigger

num2 - num1 = nigative sign this means its smaller

14 = 1110

13 = 1101

وإذا عرفنا ان الطرح هو جمع المتممه ..... إذا نوجد متممه ال -13 لتتحول العمليع الى جمع

14 =1110

13`=0011

----------------

X =0001, 1 <- CARRY OUT

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

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