أهلا ومرحبا.
في هذه المحاضرة ، أريد أن أتحدث عن عاملين غريبين بعض الشيء من حيث أنك
لن تعتقد بالضرورة أنهم عاملون.
نظرًا لأن جميع العوامل التي تعلمناها حتى هذه النقطة تشير إلى أنك تعرف نوعًا
ما من استخدام الرمز لإجراء حسابات على الأرقام.
وهذه العوامل في الواقع تبدو نوعًا ما مثل الدوال.
لذلك دعونا نتحدث عن طاقم الممثلين في حجم المشغل.
من أجل التحدث أولاً عن مشغل الصب ، يجب أن أخبرك
قليلاً عن تحويلات النوع ، وكيف يتم تحويل البيانات.
لقد تعلمنا كل شيء عن أنواع البيانات وأنواع البيانات المختلفة الموجودة هناك.
ولكن إذا كنت تحاول بالفعل تخصيص البيانات لأنواع مختلفة ،
فهناك بعض التحويلات الضمنية التي تحدث في لغة البرمجة c.
لذلك يمكن أن يحدث تحويل البيانات بين الأنواع المختلفة تلقائيًا
وهذا ما يشار إليه بالتحويل الضمني من قبل
اللغة أو صراحةً بواسطة البرنامج بواسطة البرنامج أو.
يمكن للمبرمج نفسه المطور القيام بشيء ما.
يمكنهم استخدام عامل تشغيل بشكل أساسي لإجراء تحويل.
البيانات التي يتم تحويلها ضمنيًا مهمة
حقًا لأنه يجب عليك فهم ذلك لأن معظم البرامج التي
ستقوم بتطويرها من أجل تطويرها بشكل فعال ، يجب أن تفهم هذه
القواعد لهذه التحويلات.
لأنك ستحصل غالبًا على أعداد صحيحة وأرقام فاصلة عائمة
وأرقام عشرية وأرقام صحيحة.
وستستخدمهم في خلطهم نوعًا ما في بعض الأحيان.
وعندما تفعل ، عليك أن تعرف كيف تتحول الأشياء.
الآن يجب أن تحاول تجنب ذلك قدر المستطاع باستخدام عامل الزهر.
لكن عندما لا تستخدم عامل التمثيل ، افهم ما يحدث.
وما يحدث هنا عندما تقوم بتعيين البيانات لأنواع مختلفة من العوامات
والمضاعفات ، فإن البيانات إما
سيتم اقتطاعها أو سيتم الترويج لها.
هذان المصطلحان سوف تسمعهما.
تصبح الوسائل المبتورة أقل دقة ويعني
الترويج لها أنها تصبح أكثر دقة.
لذا حاول ألا تخلط بين هذه الأنواع لكنها قد تكون مفيدة.
الشيء الرئيسي الذي يجب فهمه هو أننا نعلم من المحاضرات السابقة أن (ج) مرنة للغاية.
وهذا قرار واع من قبل مصممي اللغة.
عندما أرادوا أن يكون مرنًا ولكن مرة أخرى كمقايضة ، حيث يتم منحك
هذه الحرية الإضافية ، يمكنك إساءة
استخدامها. لذا لا تسيء استخدام
فكرة خلط الأنواع.
حاول استخدام نفس الأنواع عندما تستطيع ، الأعداد الصحيحة ذات الأعداد الصحيحة ، والعوامات ذات العوامات.
ولكن عندما لا تستطيع
، إما فهم التحويلات الضمنية أو القيام بالتحويلات الصريحة
باستخدام عامل التشغيل cast.
مرة أخرى ، هناك مشكلة أخرى
أو مفهوم آخر حيث يكون c مرنًا ، لكن لا يجب إساءة استخدامه.
لذلك ، عندما يتم تخصيص قيمة النقطة العائمة لمتغير
عدد صحيح في c ، يكون لديك int x ، و float
y ، و x يساوي y.
سيتم قطع الجزء العشري من الرقم.
لذا إذا كان لديك رقم int x يساوي 0 ، فإن float
f يساوي 12. 125 وقم بإسناد
f لـ x ، فإن قيمة x ستكون 12.
ستفقد هذه الدقة. سيتم قطع القيمة لأنك تقوم
بتعيين عدد عشري إلى عدد صحيح. الباحث يعرف فقط كيفية تخزين عدد صحيح.
لذلك يتم تحويلها تلقائيًا بواسطة لغة البرمجة ، بواسطة المترجم إلى 12.
سيتم تخزين الاستيراد فقط.
الآن إذا قمت بتعيين متغير عدد صحيح لمتغير فاصلة عائمة ، وهو عكس ذلك
، فإنه لا يسبب أي تغيير في قيمة الرقم.
يتم تحويل القيمة بواسطة النظام وتخزينها في المتغير العائم.
لذلك لا داعي للقلق حقًا ، تعيينه في التدفق.
إذا قمت بتعيين 12 للتدفق ، فسيظل 12 ، 12 فقط. 0.
عندما تقوم بإجراء العمليات الحسابية على
الأعداد الصحيحة ، وهذا يختلف عن مجرد تعيين قيم لإسنادها إلى عدد عشري أو عدد عشري
إلى int ، فهذا عندما يكون لديك تعبير
، فأنت تقوم ببعض عمليات الجمع ، مهما كانت الحالة.
عندما تقوم بعملية طرح أو جمع ، يكون لديك معاملان.
وبالتالي يمكن أن يكون عامل واحد عدد صحيح ، ومعامل واحد يمكن أن يكون عددًا عشريًا.
عليك أن تعرف كيف يحدث هذا التحويل.
لذلك إذا كان لديك معاملان في تعبير وكلاهما عدد
صحيح ، فسيتم تجاهل أي جزء عشري ناتج عن عملية القسمة.
لذا ، إذا كان لديك عدد صحيح x ، فسيكون 20.
لديك عدد صحيح y هو 12. وستحصل على 20 مقسومة على 12.
لن تحصل على 1 نقطة شيء شيء شيء ما. ستحصل فقط على 1.
سوف يتجاهل كل النتائج ويضعها جديدة لأن عدد صحيح مرة أخرى يخزن فقط عددًا صحيحًا.
إذن ، عددين هما ints ويقومان بالقسمة.
لن تحصل على رقم فاصلة عائمة. لن تحصل على رقم عشري.
الآن إذا كان أحد المشغلين عبارة عن عدد صحيح والآخر عائم ، فسيتم تشكيل
العملية كعملية فاصلة عائمة. لذا إذا كان لديك تعويم f يساوي 20. 0 ، تعويم a يساوي 10 ،
عدد صحيح ، ثم إذا قمت بإجراء قسمة
هناك أو 12 ، فأنا آسف أنه سيكون أكثر قابلية للتطبيق
، فستكون النتيجة رقمًا عائمًا وستكون
النتيجة 1 نقطة 8888 أو أيا كان 1 نقطة مهما كانت الحالة.
أنت لا تخصص هذه البيانات لأي شيء. هذا تعبير عما سيعود.
إذن ، اثنان ints في القسمة ، سيكون عددًا صحيحًا.
العدد int و double أو float ، سيكون دائمًا عددًا عشريًا ، وسيكون دائمًا عملية
عشرية للفاصلة العائمة.
وهذا هو التحويل الضمني. هذا حقًا ما تحتاجه لفهم ما
يجري وما يفعله البرنامج لك إذا لم تفعل أي شيء.
ومع ذلك ، يجب أن تحاول القيام ببعض التحويلات
الصريحة ، وهو ما يمكنك القيام به مع عامل الإرسال.
ويشار إلى هذا فقط على أنه اختيار أكثر أو أقل.
وترى الإرسال بالعديد من اللغات عندما تريد التحويل.
وكل ما تفعله هو إجراء تحويل صريح ، فأنت
تقول ما تريد أن تكون عليه البيانات.
لذا فأنت تريد أن تفعل ذلك إذا استطعت لأنه بخلاف
ذلك قد يتم تخفيض ترتيب البيانات ، فقد تضيع.
إذا قمت بعمل اثنين من الأعداد الأولية وقمت بالقسمة
ولم يتم تقسيمهما بالتساوي ، فسوف تفقد كل تلك البيانات.
لذلك من الممكن أن تطلب التحويل الدقيق للنوع الذي تريده
من خلال تحديده صراحةً.
يسمى هذا المصبوب ويتكون من قبل الكمية
مع اسم النوع المطلوب بين قوسين.
لذا فإن الأقواس واسم
النوع تشكل عامل تشغيل الأحرف الكبيرة.
تقوم بعمل قوس أيسر ثم تحدد نوع البيانات ثم تكتب قوسًا.
وهذا سيحول كل ما على يمينه ، مهما كان
التعبير على يمينه أو حتى إذا كان مجرد متغير واحد ، فسيحوله
إلى ما يوجد داخل الأقواس.
لذا فالنوع الفعلي مطلوب مثل طويل ، يتم استبداله بنوع الكلمة هذا.
إذن ، العامل الذي تم تمريره من النوع له أسبقية أعلى من جميع العمليات الحسابية باستثناء
السالب الوحدوي والوحدة زائد. لم نتعلم عن الأسبقية حتى الآن.
سنذهب في المحاضرة القادمة. الأسبقية هي في الأساس ما يحدث
، ترتيب العمليات التي يتم تنفيذها.
لذلك سوف نقدم بعض الأمثلة على ذلك. كل ما عليك أن تفهمه في هذه المرحلة هو أن عامل
التلبيس يأخذ الأسبقية على كل عامل آخر ، باستثناء اثنين أحادي ناقص و أحادي زائد.
إذن هنا مثال ، لدينا رقم 21. 51 ولدينا عامل cast
لأننا نعلم أنه عامل cast لأنه بين
قوسين وله نوع. وما نقوله أساسًا
هو أخذ 21. 51 قم بتحويله إلى عدد صحيح.
إذا قمت بتحويل رقم فاصلة عائمة إليه ،
فسيصبح الرقم الصحيح ، العدد الصحيح ، 21.
نفس الشيء الذي يحدث على الجانب الأيمن ، إنه تحويل 26. 99 إلى عدد صحيح.
إذن ما الذي سيحدث هنا في الواقع إذا فعلت هذا التعبير في بيان ،
فسيكون الناتج 21 زائد 26. سيقطع البيانات
من 0. 51 إلى عدد صحيح ونفس الشيء مثل 0. 99.
وهذا هو عامل الصب ، أي شيء داخل الأقواس يحتوي على نوع بيانات.
سترى هذا كثيرًا.
إذا كنت ستقول 21 زائد 26 وقمت برميها في عوامات ، فستضيف
نقطة 0 فقط.
عادة ، لا يتم الإرسال إلى نوع أكثر دقة لأنك
لن تكون أكثر دقة.
يمكنك التحويل من نوع أكثر دقة إلى نوع أقل دقة.
لذلك يشبه إلى حد كبير تعويم إلى عدد صحيح.
لذلك سترى هذا في بعض البرامج من حين لآخر عندما تستخدم
أنواعًا مختلفة. يجب أن تحاول تجنب استخدام أنواع مختلفة
إذا كنت تقوم بالحساب. ولكن إذا قمت بذلك ، فسترى هذا.
حجم المشغل ، عامل آخر غريب نوعًا ما ، لا يشبه الكثير
من المشغلين الآخرين. وهذه في الواقع تبدو كدالة.
لكن sizeof عامل. يقوم بعمل.
انها لا تفعل أي شيء وظيفي المنحى.
ما يفعله هو إخبارك بعدد البايتات التي يشغلها نوع
معين في الذاكرة. لذا فهي تبدو كدالة لأنها تأخذ حجة.
وسنقدم مثالاً على ذلك لكنه سيعيد فقط عدد البايت في الذاكرة. تذكر أنه اعتمادًا على النظام الذي تقوم
بتشغيله ، والنظام الأساسي الذي تقوم
بتشغيله ، ونظام التشغيل ، وبنية الكمبيوتر ، والأجهزة ، وأنواع
البيانات المختلفة ، سيتم تمثيل الذاكرة بأحجام مختلفة.
على سبيل المثال ، قد يكون عدد int 4 بايت على نظام واحد 8 في نظام آخر.
لذا ما يمكنك القيام به هو أنه يمكنك استخدام sizeof عامل التشغيل ككلمة رئيسية خاصة مع عامل تشغيل
في c ويمكنك تمرير نوع بيانات وسيخبرك بعدد البايت الذي يستخدمه في الذاكرة.
لذا فإن sizeof هو في الواقع عامل ، وليس دالة.
يتم تقييمها في وقت الترجمة وليس في وقت التشغيل ما لم يتم استخدام مصفوفة متغيرة الطول في الوسيطة الخاصة بها.
ولذا سنذكر ذلك. هذا يعني بشكل أساسي أنه إذا كان
لديك متغير داخل حجم مصفوفة
، فلن يتم حله في وقت التجميع في وقت التشغيل ، لذلك ليس من
المهم معرفة ذلك.
يمكن أن تكون الوسيطة إلى sizeof عامل التشغيل متغيرًا
، أو اسم مصفوفة ، أو اسم نوع بيانات أساسي ، مثل
int float ، أو اسم نوع البيانات المشتق ، أي شيء أو تعبير.
لذا يمكنك أن تقول حجم x زائد y.
وهذا يعني فقط حجم x زائد حجم
y أو الأرقام الناتجة. إذا كانت x هي int ، و y هي حجمها 16 ، فيمكن
القول أن هذا بوصة 4 بايت.
إذا كان العدد واحدًا كان عددًا عشريًا وكانت النتيجة حساب الفاصلة العائمة
، فسيكون الطفو 8 بايت أو شيء من هذا القبيل.
لكن يمكنك استخدامه لأشياء كثيرة ، ويجب استخدامه لأشياء كثيرة. Sizeof int ، على سبيل المثال ، سينتج
عن عدد البايتات التي يشغلها متغير من النوع int.
لذلك سيعود هذا 4 أو 8 حسب نظامك.
يمكنك أيضًا تطبيق sizeof عامل التشغيل على تعبير ، كما
ذكرت ، النتيجة هي حجم القيمة.
ينتج عن تعبير المنطقة. لذلك إذا كان اثنان من ints معًا ، فسيظلان عبارة عن عدد صحيح.
لذلك لا يزال الحجم. لكنك سترى حجم العامل المستخدم أيضًا عندما نتحدث عن المؤشرات.
أردت التحدث عن هذا الآن لأنه عامل.
لكننا سنقدم العديد من الأمثلة على ذلك ونستعرضها في جميع أنحاء الفصل بينما
نتحدث عن المزيد من المفاهيم.
على وجه التحديد ، يلعب حجم عامل التشغيل دورًا كبيرًا
عندما نتحدث عن المؤشرات لأنه عندما تقوم
بحساب مقدار الذاكرة التي يجب تخصيصها وما هي المؤشرات ، فإنك تستخدم sizeof
لأنك تريد أن تكون دقيقًا.
لكن يمكنك استخدامه لأشياء أخرى أيضًا.
لذا استخدم sizeof عامل التشغيل كلما أمكن ذلك لتجنب احتساب أحجام الكود
الثابت في برنامجك.
لا تعد الأرقام السحرية لأحجام الكود الثابت شيئًا جيدًا لأنه
مرة أخرى إذا كنت تستخدم نظامًا مختلفًا ، إذا كنت ستعمل
على الكود الثابت 4 في 1 لنظام int ، فقد يكون النظام الآخر 8 ، لذا
استخدم size of بقدر ما يمكنك وسنرى أن هذا يصبح أكثر ارتباطًا عندما
نتحدث عن المؤشرات.
المشغلون الآخرون الغريبون
قليلاً هم عامل النجمة.
ربما قلت لنفسك علامة النجمة ، لقد تحدثنا بالفعل عن هذا في الضرب.
لكن هذه العلامة النجمية تأخذ عاملين ، أحدهما على اليسار والآخر على اليمين.
إذا قمت بتطبيق عامل النجمة على
متغير وقلت فقط اسم متغير النجمة مع وسيطة واحدة فقط إلى اليمين
، فهذا يمثل شيئًا آخر. إنه يمثل في الواقع مؤشرًا.
إنه إلغاء الإشارة إلى المؤشر.
ومرة أخرى ، هذا لن أعود على هذا الآن لأننا سنمر بهذا
عندما نتحدث عن المؤشرات.
ولكن إذا رأيت شيئًا مثل star a ، فلا تفزع أن هذا صحيح بالفعل.
هذا يقوم بعمل علامة النجمة مشغل المؤشر.
قد ترى أيضًا علامة الاستفهام النقطتين.
هذا عامل يستخدم لصنع القرار.
إذا كان الشرط صحيحًا ، وإذا كان الشيء الموجود على اليسار صحيحًا ، فسيتم تقييم
القيمة الموجودة على اليمين بعد النقطتين وهكذا خلافًا لذلك.
إنه تدوين مختصر لبيان if-else.
إنه عامل ثلاثي ، يطلق عليه. لكن مرة أخرى ، لا أرغب في مناقشة
هذه الأمور بتفصيل كبير الآن
لأننا سنتحدث عنها عندما نتحدث عن مواضيعنا المحددة.
سنتحدث عن عامل الدوران عندما نتحدث عن بيانات القرار. سنتحدث عن عامل النجمة
أحادي عندما نتحدث عن المؤشرات.
ولكن إذا رأيت هذا الآن وأردت أن أذكره الآن لأنهم مشغلين تقنيًا ، لكننا سوف نفهم حالات الاستخدام
الخاصة بهم عندما نتحدث عن هذه المفاهيم. شكرًا لك.