Hana Ramzi
05-17-2015, 21:57
تلبيس
صب أنواع رقمية
وغالبا ما يحدث ضرورة لتحويل نوع رقمي واحد إلى آخر. لا يمكن تحويل جميع أنواع رقمية إلى آخر. هنا هو مخطط يسمح الصب:
خطوط متينة مع السهام تشير إلى التغييرات التي يتم تنفيذها تقريبا دون أي خسارة في المعلومات. بدلا من نوع شار، و منطقي نوع يمكن استخدام (على حد سواء اتخاذ 1 بايت من الذاكرة)، بدلا من نوع int، و اللون نوع يمكن استخدام (4 بايت)، بدلا من النوع الطويل، التاريخ والوقت ويمكن استخدام (خذ 8 بايت). أربعة خطوط رمادية متقطع، arrowed أيضا، للدلالة التحويلات، عندما يمكن أن يحدث فقدان الدقة. على سبيل المثال، عدد الأرقام في عدد صحيح يساوي 123456789 ( الباحث ) هو أعلى من عدد الأرقام التي يمكن أن يمثله تعويم .
الباحث ن = 123456789؛
تعويم و = ن؛ // مضمون و يساوي 1.234567892E8
الطباعة ("ن =" ن "، و ="، و).
// نتيجة ن = 123456789 = و 123456792،00000
عدد تحويلها إلى تعويم له نفس النظام، ولكن هو أقل دقة. التحويلات، على عكس السهام السوداء، لا يمكن أن يؤديها مع احتمال فقدان البيانات. التحويلات بين شار وuchar، قصيرة وUSHORT، الباحث وUINT، طويلة وULONG (التحويلات لكلا الجانبين)، قد يؤدي إلى فقدان البيانات.
نتيجة تحويل القيم النقطة العائمة إلى عدد صحيح نوع يتم حذف الجزء الكسري دائما. إذا كنت تريد أن تختم تعويم إلى أقرب عدد صحيح (والذي هو أكثر فائدة في كثير من الحالات)، يجب عليك استخدام MathRound () .
على سبيل المثال:
// --- تسارع الجاذبية
ز مزدوج = 9.8؛
round_g ضعف = (الباحث) ز.
math_round_g ضعف = MathRound (ز)؛
الطباعة ("round_g =" round_g)؛
الطباعة ("math_round_g =" math_round_g)؛
/ *
النتيجة:
round_g = 9
math_round_g = 10
* /
إذا تم الجمع بين قيمتين من قبل مشغل ثنائي، قبل تنفيذ العملية يتم تحويل المعامل من نوع أقل لنوع العالي وفقا لإعطاء الأولوية في مخطط أدناه:
أنواع البيانات شار، uchar، قصيرة، وUSHORT يتم تحويلها دون قيد أو شرط إلى نوع int.
الأمثلة على ذلك:
شار C1 = 3؛
// --- المثال الأول
D2 مزدوج = C1 / 2 + 0 3؛
الطباعة ("C1 / 2 + 0.3 =" D2)؛
// النتيجة: C1 / 2 + 0.3 = 1.3
// --- المثال الثاني
D2 = C1 / 2 0 + 0 3.؛
الطباعة ("C1 / 2.0 + 0.3 =" D2)؛
// النتيجة: C1 / 2.0 + 0.3 = 1.8
يتكون التعبير المحسوبة لعمليتين. في المثال الأول، يتم تحويل C1 متغير من نوع char إلى متغير مؤقت من نوع int، لأن المعامل الثاني في عملية الانقسام، ودائم 2، هو من النوع العالي كثافة العمليات. ونتيجة لتقسيم عدد صحيح 3/2 نحصل على القيمة 1، وهي من نوع int.
في العملية الثانية من المثال الأول، المعامل الثاني هو ثابت 0.3، والذي هو من النوع المزدوج، بحيث يتم تحويل نتيجة العملية الأولى إلى متغير مؤقت من النوع المزدوج بقيمة 1.0.
في المثال الثاني هو تحويل متغير من نوع شار C1 إلى متغير مؤقت من النوع المزدوج، لأن المعامل الثاني في عملية التقسيم، ثابت 2.0، هو من النوع المزدوج. لم يتم إجراء مزيد من التحويلات.
تلبيس من أنواع رقمية
في التعبير عن اللغة MQL5 كلا تلبيس الصريحة والضمنية يمكن استخدامها. يتم كتابة تلبيس صريحة على النحو التالي:
var_1 = (النوع) var_2.
تعبير أو وظيفة نتيجة تنفيذ يمكن استخدامها كمتغير var_2. تسجيل الوظيفي للتلبيس صريح من الممكن أيضا:
var_1 = نوع (var_2)؛
دعونا النظر في تلبيس صريح على أساس المثال الأول.
// --- المثال الثالث
D2 مزدوج = (مزدوج) C1 / 2 + 0.3.
الطباعة ("(مزدوج) C1 / 2 + 0.3 =" D2)؛
// النتيجة: (مزدوج) C1 / 2 + 0.3 = 1.80000000
قبل تنفيذ عملية التقسيم، هو يلقي متغير C1 صراحة إلى نوع مزدوج. الآن يلقي عدد صحيح ثابت 2 إلى القيمة 2.0 من نوع مزدوج، لأن نتيجة تحويل المعامل الأول اتخذت نوع مزدوج. في الواقع، وتلبيس الصريح هو عملية الأحادية.
الى جانب ذلك، عندما يحاول أن يلقي أنواع، والنتيجة قد تتجاوز النطاق المسموح به. في هذه الحالة، يحدث الاقتطاع. على سبيل المثال:
شار ج.
uchar ش.
ج = 400؛
ش = 400؛
الطباعة ("ج =" ج)؛ // النتيجة ج = -112
الطباعة ("ش ="، ش)؛ // النتيجة ش = 144
قبل أن يتم تنفيذ العمليات (ما عدا تلك المهمة)، يتم تحويل البيانات إلى أقصى نوع الأولوية. قبل أن يتم تنفيذ العمليات المهمة، ويلقي البيانات إلى نوع الهدف.
الأمثلة على ذلك:
كثافة العمليات ط = 1/2؛ // لا أنواع الصب، والنتيجة هي 0
الطباعة ("ط = 1/2"، ط)؛
الباحث ك = 1/2 0؛ // يلقي التعبير إلى نوع مزدوج،
الطباعة ("K = 1/2"، ك)؛ // بعد ذلك إلى نوع الهدف من الباحث، والنتيجة هي 0
د مزدوج = 1 0/2 0؛ // لا أنواع الصب، والنتيجة هي 0.5
الطباعة ("د = 1 / 2.0"؛، د)؛
ه مزدوج = 1/2 0؛ // يلقي التعبير إلى نوع مزدوج،
الطباعة ("ه = 1 / 2.0؛" ه)؛ // هذا هو نفس نوع الهدف، والنتيجة هي 0.5
ضعف س = 1/2؛ ويلقي // التعبير عن نوع int إلى typr هدف مزدوج،
الطباعة ("س = 1/2"؛، خ)؛ // والنتيجة هي 0.0
عند تحويل طويلة / نوع ULONG إلى مزدوجة، والدقة قد تفقد في حالة قيمة عدد صحيح أكبر من 9223372036854774784 أو أقل من -9223372036854774784.
صب أنواع رقمية
وغالبا ما يحدث ضرورة لتحويل نوع رقمي واحد إلى آخر. لا يمكن تحويل جميع أنواع رقمية إلى آخر. هنا هو مخطط يسمح الصب:
خطوط متينة مع السهام تشير إلى التغييرات التي يتم تنفيذها تقريبا دون أي خسارة في المعلومات. بدلا من نوع شار، و منطقي نوع يمكن استخدام (على حد سواء اتخاذ 1 بايت من الذاكرة)، بدلا من نوع int، و اللون نوع يمكن استخدام (4 بايت)، بدلا من النوع الطويل، التاريخ والوقت ويمكن استخدام (خذ 8 بايت). أربعة خطوط رمادية متقطع، arrowed أيضا، للدلالة التحويلات، عندما يمكن أن يحدث فقدان الدقة. على سبيل المثال، عدد الأرقام في عدد صحيح يساوي 123456789 ( الباحث ) هو أعلى من عدد الأرقام التي يمكن أن يمثله تعويم .
الباحث ن = 123456789؛
تعويم و = ن؛ // مضمون و يساوي 1.234567892E8
الطباعة ("ن =" ن "، و ="، و).
// نتيجة ن = 123456789 = و 123456792،00000
عدد تحويلها إلى تعويم له نفس النظام، ولكن هو أقل دقة. التحويلات، على عكس السهام السوداء، لا يمكن أن يؤديها مع احتمال فقدان البيانات. التحويلات بين شار وuchar، قصيرة وUSHORT، الباحث وUINT، طويلة وULONG (التحويلات لكلا الجانبين)، قد يؤدي إلى فقدان البيانات.
نتيجة تحويل القيم النقطة العائمة إلى عدد صحيح نوع يتم حذف الجزء الكسري دائما. إذا كنت تريد أن تختم تعويم إلى أقرب عدد صحيح (والذي هو أكثر فائدة في كثير من الحالات)، يجب عليك استخدام MathRound () .
على سبيل المثال:
// --- تسارع الجاذبية
ز مزدوج = 9.8؛
round_g ضعف = (الباحث) ز.
math_round_g ضعف = MathRound (ز)؛
الطباعة ("round_g =" round_g)؛
الطباعة ("math_round_g =" math_round_g)؛
/ *
النتيجة:
round_g = 9
math_round_g = 10
* /
إذا تم الجمع بين قيمتين من قبل مشغل ثنائي، قبل تنفيذ العملية يتم تحويل المعامل من نوع أقل لنوع العالي وفقا لإعطاء الأولوية في مخطط أدناه:
أنواع البيانات شار، uchar، قصيرة، وUSHORT يتم تحويلها دون قيد أو شرط إلى نوع int.
الأمثلة على ذلك:
شار C1 = 3؛
// --- المثال الأول
D2 مزدوج = C1 / 2 + 0 3؛
الطباعة ("C1 / 2 + 0.3 =" D2)؛
// النتيجة: C1 / 2 + 0.3 = 1.3
// --- المثال الثاني
D2 = C1 / 2 0 + 0 3.؛
الطباعة ("C1 / 2.0 + 0.3 =" D2)؛
// النتيجة: C1 / 2.0 + 0.3 = 1.8
يتكون التعبير المحسوبة لعمليتين. في المثال الأول، يتم تحويل C1 متغير من نوع char إلى متغير مؤقت من نوع int، لأن المعامل الثاني في عملية الانقسام، ودائم 2، هو من النوع العالي كثافة العمليات. ونتيجة لتقسيم عدد صحيح 3/2 نحصل على القيمة 1، وهي من نوع int.
في العملية الثانية من المثال الأول، المعامل الثاني هو ثابت 0.3، والذي هو من النوع المزدوج، بحيث يتم تحويل نتيجة العملية الأولى إلى متغير مؤقت من النوع المزدوج بقيمة 1.0.
في المثال الثاني هو تحويل متغير من نوع شار C1 إلى متغير مؤقت من النوع المزدوج، لأن المعامل الثاني في عملية التقسيم، ثابت 2.0، هو من النوع المزدوج. لم يتم إجراء مزيد من التحويلات.
تلبيس من أنواع رقمية
في التعبير عن اللغة MQL5 كلا تلبيس الصريحة والضمنية يمكن استخدامها. يتم كتابة تلبيس صريحة على النحو التالي:
var_1 = (النوع) var_2.
تعبير أو وظيفة نتيجة تنفيذ يمكن استخدامها كمتغير var_2. تسجيل الوظيفي للتلبيس صريح من الممكن أيضا:
var_1 = نوع (var_2)؛
دعونا النظر في تلبيس صريح على أساس المثال الأول.
// --- المثال الثالث
D2 مزدوج = (مزدوج) C1 / 2 + 0.3.
الطباعة ("(مزدوج) C1 / 2 + 0.3 =" D2)؛
// النتيجة: (مزدوج) C1 / 2 + 0.3 = 1.80000000
قبل تنفيذ عملية التقسيم، هو يلقي متغير C1 صراحة إلى نوع مزدوج. الآن يلقي عدد صحيح ثابت 2 إلى القيمة 2.0 من نوع مزدوج، لأن نتيجة تحويل المعامل الأول اتخذت نوع مزدوج. في الواقع، وتلبيس الصريح هو عملية الأحادية.
الى جانب ذلك، عندما يحاول أن يلقي أنواع، والنتيجة قد تتجاوز النطاق المسموح به. في هذه الحالة، يحدث الاقتطاع. على سبيل المثال:
شار ج.
uchar ش.
ج = 400؛
ش = 400؛
الطباعة ("ج =" ج)؛ // النتيجة ج = -112
الطباعة ("ش ="، ش)؛ // النتيجة ش = 144
قبل أن يتم تنفيذ العمليات (ما عدا تلك المهمة)، يتم تحويل البيانات إلى أقصى نوع الأولوية. قبل أن يتم تنفيذ العمليات المهمة، ويلقي البيانات إلى نوع الهدف.
الأمثلة على ذلك:
كثافة العمليات ط = 1/2؛ // لا أنواع الصب، والنتيجة هي 0
الطباعة ("ط = 1/2"، ط)؛
الباحث ك = 1/2 0؛ // يلقي التعبير إلى نوع مزدوج،
الطباعة ("K = 1/2"، ك)؛ // بعد ذلك إلى نوع الهدف من الباحث، والنتيجة هي 0
د مزدوج = 1 0/2 0؛ // لا أنواع الصب، والنتيجة هي 0.5
الطباعة ("د = 1 / 2.0"؛، د)؛
ه مزدوج = 1/2 0؛ // يلقي التعبير إلى نوع مزدوج،
الطباعة ("ه = 1 / 2.0؛" ه)؛ // هذا هو نفس نوع الهدف، والنتيجة هي 0.5
ضعف س = 1/2؛ ويلقي // التعبير عن نوع int إلى typr هدف مزدوج،
الطباعة ("س = 1/2"؛، خ)؛ // والنتيجة هي 0.0
عند تحويل طويلة / نوع ULONG إلى مزدوجة، والدقة قد تفقد في حالة قيمة عدد صحيح أكبر من 9223372036854774784 أو أقل من -9223372036854774784.