"কে + = সি + = কে + = সি;" এ ইনলাইন অপারেটরগুলির জন্য ব্যাখ্যা রয়েছে?


89

নিম্নলিখিত অপারেশন থেকে ফলাফল ব্যাখ্যা কি?

k += c += k += c;

আমি নিম্নলিখিত কোড থেকে আউটপুট ফলাফল বুঝতে চেষ্টা করছিলাম:

int k = 10;
int c = 30;
k += c += k += c;
//k=80 instead of 110
//c=70

এবং বর্তমানে আমি বুঝতে পেরেছি যে কেন "কে" এর ফলাফল 80 হয়? কেন কেন = 40 বরাদ্দ করা হচ্ছে না (আসলে ভিজ্যুয়াল স্টুডিও আমাকে বলে যে সেই মান অন্য কোথাও ব্যবহার হচ্ছে না)?

কেন কে 80 এবং 110 নয়?

যদি আমি এই অপারেশনটি বিভক্ত করি:

k+=c;
c+=k;
k+=c;

ফলাফলটি কে = ১১০।

আমি সিআইএলটি দেখার চেষ্টা করছিলাম , তবে উত্পন্ন সিআইএলকে ব্যাখ্যা করার ক্ষেত্রে আমি এতটা গভীর নই এবং কয়েকটি বিবরণ পাই না:

 // [11 13 - 11 24]
IL_0001: ldc.i4.s     10
IL_0003: stloc.0      // k

// [12 13 - 12 24]
IL_0004: ldc.i4.s     30
IL_0006: stloc.1      // c

// [13 13 - 13 30]
IL_0007: ldloc.0      // k expect to be 10
IL_0008: ldloc.1      // c
IL_0009: ldloc.0      // k why do we need the second load?
IL_000a: ldloc.1      // c
IL_000b: add          // I expect it to be 40
IL_000c: dup          // What for?
IL_000d: stloc.0      // k - expected to be 40
IL_000e: add
IL_000f: dup          // I presume the "magic" happens here
IL_0010: stloc.1      // c = 70
IL_0011: add
IL_0012: stloc.0      // k = 80??????

4
আপনি বিভিন্ন ফল পেয়েছেন কারণ আপনি ফাংশনটি বিভক্ত করেছেন, কে + = সি + = কে + = সি = ৮০ কারণ কে এবং সি এর মানগুলি সমস্ত পরিমাণে একই থাকে, তাই কে + = সি + = কে + = সি সমান থেকে 10 + 30 + 10 + 30
জোও পাওলো

78
আকর্ষণীয় অনুশীলন, তবে, বাস্তবে, কখনও এই জাতীয় কোড চেইন লিখবেন না যতক্ষণ না আপনি আপনার সহকর্মীরা আপনাকে ঘৃণা করতে চান। :)
আনহানডেলডএক্সসেপসিয়ান

4
@ অ্যান্ড্রি কোটলিয়ারভ কারণ কে + = সি + = কে + = সি 10 + 30 + 10 + 30, সুতরাং, কে সমস্ত মান গ্রহণ করে এবং সি কেবল সর্বশেষ 3 টি যুক্তি 30 + 10 + 30 = 70 পেয়ে যায়
জোও পাওলো আমোরিম

6
এছাড়াও মূল্য পঠন - এরিক Lippert এর উত্তর থেকে আমি কি পার্থক্য ++ এবং ++, আমি নই? '
ওয়াই হা লি

34
"ডাক্তার, ডাক্তার, আমি যখন এটি করি তখন ব্যথা হয়!" "তো এটা করো না।"
ডেভিড কনরাড

উত্তর:


104

মত একটি অপারেশন a op= b;সমতুল্য a = a op b;। একটি অ্যাসাইনমেন্ট স্টেটমেন্ট বা এক্সপ্রেশন হিসাবে ব্যবহার করা যেতে পারে, এক্সপ্রেশন হিসাবে এটি নির্ধারিত মান দেয়। আপনার বিবৃতি ...

k += c += k += c;

..., যেহেতু অ্যাসাইনমেন্ট অপারেটরটি ডান-অ্যাসোসিয়েটিভ, সে হিসাবেও এটি লেখা যেতে পারে

k += (c += (k += c));

বা (প্রসারিত)

k =  k +  (c = c +  (k = k  + c));
     10301030   // operand evaluation order is from left to right
      |         |        ↓    ↓
      |         ↓   4010 + 30   // operator evaluation7030 + 40
8010 + 70

যেখানে পুরো মূল্যায়নকালে জড়িত ভেরিয়েবলগুলির পুরানো মানগুলি ব্যবহৃত হয়। এটি মানটির জন্য বিশেষভাবে সত্য k(নীচের আইএলটির আমার পর্যালোচনা এবং ওয়াই হা লি লিঙ্ক দেওয়া লিঙ্কটি দেখুন )। অতএব, আপনি 70 + 40 (নতুন মান k) = 110 পাচ্ছেন না , তবে 70 + 10 (এর পুরানো মান k) = 80 পাচ্ছেন ।

মুল বক্তব্যটি হ'ল (সি # স্পেস অনুসারে ) "একটি অভিব্যক্তির অপারেন্ডগুলি বাম থেকে ডানে মূল্যায়ন করা হয়" (অপারেন্ডগুলি ভেরিয়েবল cএবং kআমাদের ক্ষেত্রে)। এটি অপারেটর প্রাধান্য এবং সাহচর্য থেকে স্বতন্ত্র যা এই ক্ষেত্রে ডান থেকে বামে একটি মৃত্যুদন্ড কার্যকর করার আদেশ দেয়। ( এই পৃষ্ঠায় এরিক লিপার্টের উত্তরের মন্তব্য দেখুন )।


এখন আসুন আইএল তাকান। আইএল স্ট্যাক ভিত্তিক ভার্চুয়াল মেশিন ধরে নিয়েছে, এটি রেজিস্টার ব্যবহার করে না।

IL_0007: ldloc.0      // k (is 10)
IL_0008: ldloc.1      // c (is 30)
IL_0009: ldloc.0      // k (is 10)
IL_000a: ldloc.1      // c (is 30)

স্ট্যাকটি এখন এ জাতীয় দেখাচ্ছে (বাম থেকে ডানে; স্ট্যাকের শীর্ষটি ডানদিকে)

10 30 10 30

IL_000b: add          // pops the 2 top (right) positions, adds them and pushes the sum back

10 30 40

IL_000c: dup

10 30 40 40

IL_000d: stloc.0      // k <-- 40

10 30 40

IL_000e: add

10 70

IL_000f: dup

10 70 70

IL_0010: stloc.1      // c <-- 70

10 70

IL_0011: add

80

IL_0012: stloc.0      // k <-- 80

মনে রাখবেন যে IL_000c: dup, IL_000d: stloc.0অর্থাৎ প্রথম নিয়োগটি k এখনই অপ্টিমাইজ করা যেতে পারে। আইএলকে মেশিন কোডে রূপান্তর করার সময় সম্ভবত জিটার দ্বারা ভেরিয়েবলের জন্য এটি করা হয়।

এও নোট করুন যে গণনা দ্বারা প্রয়োজনীয় সমস্ত মানগুলি হয় কোনও অ্যাসাইনমেন্ট করার আগে স্ট্যাকের দিকে ধাক্কা দেয় বা এই মানগুলি থেকে গণনা করা হয়। নির্ধারিত মানগুলি (দ্বারা stloc) এই মূল্যায়নের সময় কখনও পুনরায় ব্যবহার করা হয় না। stlocস্ট্যাকের শীর্ষে পপস করে।


নিম্নলিখিত কনসোল পরীক্ষার আউটপুট ( Releaseঅপ্টিমাইজেশন সহ মোড)

কে (10)
মূল্যায়ন সি (30)
মূল্যায়ন কে (10) কে (10)
মূল্যায়ন সি (30)
40 কে
নির্ধারিত কে 70 কে কে
বরাদ্দ করা হয়েছে

private static int _k = 10;
public static int k
{
    get { Console.WriteLine($"evaluating k ({_k})"); return _k; }
    set { Console.WriteLine($"{value} assigned to k"); _k = value; }
}

private static int _c = 30;
public static int c
{
    get { Console.WriteLine($"evaluating c ({_c})"); return _c; }
    set { Console.WriteLine($"{value} assigned to c"); _c = value; }
}

public static void Test()
{
    k += c += k += c;
}

আপনি আরও সম্পূর্ণ জন্য সূত্র সংখ্যা সঙ্গে চূড়ান্ত ফলাফল যুক্ত করতে পারে: চূড়ান্ত হয় k = 10 + (30 + (10 + 30)) = 80এবং যে cচূড়ান্ত মান প্রথম বন্ধনী যা সেট হয় সেট করা হয় c = 30 + (10 + 30) = 70
ফ্রাঙ্ক

4
প্রকৃতপক্ষে যদি kস্থানীয় হয় তবে ডেড স্টোরটি অবশ্যই অপ্টিমাইজেশন চালু থাকলে এবং তা না থাকলে সংরক্ষণ করা হয়, একটি আকর্ষণীয় প্রশ্ন হ'ল কিচিরমিচির ক্ষেত্র, সম্পত্তি, অ্যারে স্লট ইত্যাদি যদি ডেড স্টোরকে এলিডে রাখার অনুমতি দেওয়া kহয়; বাস্তবে আমি বিশ্বাস করি না।
এরিক লিপার্ট

রিলিজ মোডে একটি কনসোল পরীক্ষা প্রকৃতপক্ষে দেখায় যে kএটি কোনও সম্পত্তি হলে দু'বার বরাদ্দ করা হয়েছে।
অলিভিয়ার জ্যাকট-ডেসকোম্বেস

26

প্রথমে হেন্ক এবং অলিভিয়ের উত্তরগুলি সঠিক; আমি এটিকে কিছুটা আলাদাভাবে ব্যাখ্যা করতে চাই। বিশেষত, আমি আপনার তৈরি এই পয়েন্টটি সম্বোধন করতে চাই। আপনার কাছে বিবৃতিগুলির এই সেট রয়েছে:

int k = 10;
int c = 30;
k += c += k += c;

এবং তারপরে আপনি ভুলভাবে সিদ্ধান্তে পৌঁছে গেছেন যে এটি এই বিবৃতিগুলির সেট হিসাবে একই ফলাফল দেয়:

int k = 10;
int c = 30;
k += c;
c += k;
k += c;

আপনি কীভাবে ভুলটি পেয়েছিলেন এবং কীভাবে এটি সঠিকভাবে করবেন তা দেখার জন্য তথ্যবহুল। এটি ভেঙে ফেলার সঠিক উপায় এটি।

প্রথমে, বহিরাগতকে আবার লিখুন + =

k = k + (c += k += c);

দ্বিতীয়ত, বাহ্যতমতমটি আবার লিখুন + আমি আশা করি আপনি সম্মত হন যে x = y + z সর্বদা "সাময়িকভাবে y এর মূল্যায়ন করুন, অস্থায়ীতে z এর মূল্যায়ন করুন, অস্থায়ী সংস্থাগুলি যোগ করুন, যোগফলটি x কে নির্ধারণ করুন" এর সমান হতে হবে । সুতরাং আসুন এটি খুব স্পষ্ট করা যাক:

int t1 = k;
int t2 = (c += k += c);
k = t1 + t2;

এটি পরিষ্কার হয়ে গেছে তা নিশ্চিত করুন, কারণ আপনি যে ভুলটি পেয়েছেন এটি এই পদক্ষেপ । জটিল অপারেশনগুলিকে সহজ অপারেশনে ভাঙ্গার সময় আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি ধীরে ধীরে এবং সাবধানতার সাথে করছেন এবং পদক্ষেপগুলি এড়িয়ে যাবেন না । পদক্ষেপগুলি এড়ানো হয় যেখানে আমরা ভুল করি।

ঠিক আছে, এখন ধীরে ধীরে এবং সাবধানে আবার, টি 2-এর অ্যাসাইনমেন্টটি ভেঙে দিন।

int t1 = k;
int t2 = (c = c + (k += c));
k = t1 + t2;

অ্যাসাইনমেন্টটি সি হিসাবে নির্ধারিত হিসাবে টি 2 তে একই মান নির্ধারণ করবে, সুতরাং আসুন আমরা তা বলি:

int t1 = k;
int t2 = c + (k += c);
c = t2;
k = t1 + t2;

দুর্দান্ত এখন দ্বিতীয় লাইনটি ভাঙ্গুন:

int t1 = k;
int t3 = c;
int t4 = (k += c);
int t2 = t3 + t4;
c = t2;
k = t1 + t2;

দুর্দান্ত, আমরা অগ্রগতি করছি। অ্যাসাইনমেন্টটি টি -4 এ ভেঙে দিন:

int t1 = k;
int t3 = c;
int t4 = (k = k + c);
int t2 = t3 + t4;
c = t2;
k = t1 + t2;

এখন তৃতীয় লাইনটি ভাঙ্গুন:

int t1 = k;
int t3 = c;
int t4 = k + c;
k = t4;
int t2 = t3 + t4;
c = t2;
k = t1 + t2;

এবং এখন আমরা পুরো জিনিসটি দেখতে পারি:

int k = 10;  // 10
int c = 30;  // 30
int t1 = k;  // 10
int t3 = c;  // 30
int t4 = k + c; // 40
k = t4;         // 40
int t2 = t3 + t4; // 70
c = t2;           // 70
k = t1 + t2;      // 80

সুতরাং যখন আমরা সম্পন্ন করব, কে 80 এবং সি 70 হয়।

এখন আসুন দেখে নেওয়া যাক এটি কীভাবে আইএলে প্রয়োগ করা হয়:

int t1 = k;
int t3 = c;  
  is implemented as
ldloc.0      // stack slot 1 is t1
ldloc.1      // stack slot 2 is t3

এখন এটি কিছুটা জটিল:

int t4 = k + c; 
k = t4;         
  is implemented as
ldloc.0      // load k
ldloc.1      // load c
add          // sum them to stack slot 3
dup          // t4 is stack slot 3, and is now equal to the sum
stloc.0      // k is now also equal to the sum

আমরা উপরের হিসাবে বাস্তবায়ন করতে পারে

ldloc.0      // load k
ldloc.1      // load c
add          // sum them
stloc.0      // k is now equal to the sum
ldloc.0      // t4 is now equal to k

তবে আমরা "ডুপ" কৌশলটি ব্যবহার করি কারণ এটি কোডটি ছোট করে তোলে এবং জিটারটিতে এটি আরও সহজ করে তোলে এবং আমরা একই ফল পাই। সাধারণভাবে, সি # কোড জেনারেটর স্ট্যাকের উপর সাময়িকভাবে "সাময়িক" রাখার চেষ্টা করে। আপনি যদি কম ইফেমেরালগুলি সহ আইএল অনুসরণ করা সহজ মনে করেন, অনুকূলিতকরণ বন্ধ করুন , এবং কোড জেনারেটর কম আক্রমণাত্মক হবে।

সি পেতে আমাদের এখন একই কৌশল করতে হবে:

int t2 = t3 + t4; // 70
c = t2;           // 70
  is implemented as:
add          // t3 and t4 are the top of the stack.
dup          
stloc.1      // again, we do the dup trick to get the sum in 
             // both c and t2, which is stack slot 2.

এবং পরিশেষে:

k = t1 + t2;
  is implemented as
add          // stack slots 1 and 2 are t1 and t2.
stloc.0      // Store the sum to k.

যেহেতু আমাদের অন্য কোনও কিছুর জন্য যোগফলের প্রয়োজন নেই, তাই আমরা এটিকে ফাঁকি দেই না। স্ট্যাক এখন খালি, এবং আমরা বিবৃতিটির শেষে এসেছি।

গল্পটির নৈতিকতা হ'ল: আপনি যখন কোনও জটিল প্রোগ্রামটি বোঝার চেষ্টা করছেন তখন সর্বদা একবারে ক্রিয়াকলাপ বন্ধ করুন । সংক্ষিপ্ত কাটা গ্রহণ করবেন না; তারা আপনাকে পথভ্রষ্ট করবে।


4
@ অলিভিয়ার জাকোট-ডেসকোম্বেস: অনুমানের প্রাসঙ্গিক রেখাটি "অপারেটর" বিভাগে রয়েছে এবং বলেছে "অভিব্যক্তির অপারেন্ডগুলি বাম থেকে ডানে মূল্যায়ন করা হয়। উদাহরণস্বরূপ F(i) + G(i++) * H(i), পদ্ধতি এফ এর i এর পুরানো মান ব্যবহার করে বলা হয়, তারপরে পদ্ধতিটি জি কে i এর পুরানো মান দিয়ে ডাকা হয়, এবং, অবশেষে, পদ্ধতির এইচকে i এর নতুন মান দিয়ে ডাকা হয় This এটি অপারেটর নজিরের সাথে পৃথক এবং সম্পর্কিত নয় "" (জোর দেওয়া হয়েছে।) সুতরাং আমি অনুমান করি যে আমি ভুল ছিলাম যখন আমি বলেছিলাম যে "পুরাতন মানটি ব্যবহৃত হয়" এমনটি কোথাও নেই! এটি একটি উদাহরণে ঘটে। তবে আদর্শিক বিটটি "বাম থেকে ডান"।
এরিক লিপার্ট

4
এটি ছিল অনুপস্থিত লিঙ্ক। তত্পরতা হল আমাদের অপারেন্ড মূল্যায়ন আদেশ এবং অপারেটর অগ্রাধিকার মধ্যে পার্থক্য করতে হবে । অপেরাণ্ড মূল্যায়ন বাম থেকে ডানে এবং অপির ক্ষেত্রে অপারেটরকে ডান থেকে বামে চালিত করে।
অলিভিয়ার জ্যাকট-ডেসকোম্বেস

4
@ অলিভিয়ার জাকোট-ডেসকোম্বেস: এটি ঠিক right অগ্রাধিকার এবং সাহচর্যতার সাথে স্যুট এক্সপ্রেসনগুলি মূল্যায়ন করা হয় এমন আদেশের সাথে কিছুই করার নেই, এই ঘটনাটি ছাড়াও যে অগ্রাধিকার এবং সাহচর্যতা subexpression গণ্ডি কোথায় তা নির্ধারণ করে । Subexpressions বাম থেকে ডান মূল্যায়ন করা হয়।
এরিক লিপার্ট

4
উফস দেখে মনে হচ্ছে আপনি অ্যাসাইনমেন্ট অপারেটরগুলি ওভারলোড করতে পারবেন না: /
জননি 5

4
@ জননি 5: এটি সঠিক। তবে আপনি ওভারলোড করতে পারেন +এবং তারপরে আপনি +=নিখরচায় পাবেন কারণ কেবলমাত্র একবার মূল্যায়ন x += yকরা x = x + yছাড়া xএটি সংজ্ঞায়িত । +এটি নির্মিত বা ব্যবহারকারী সংজ্ঞায়িত নির্বিশেষে সত্য । সুতরাং: +একটি রেফারেন্স টাইপ ওভারলোডিং চেষ্টা করুন এবং দেখুন কি হয়।
এরিক লিপার্ট

14

এটি নীচে সিদ্ধ হয়: খুব প্রথমটি +=প্রয়োগ করা হয় মূল kবা মানটির সাথে যা আরও বেশি ডান গণনা করা হয়েছিল?

উত্তরটি হ'ল যদিও অ্যাসাইনমেন্টগুলি ডান থেকে বামে আবদ্ধ, ক্রিয়াকলাপগুলি এখনও বাম থেকে ডানে অগ্রসর হয়।

সুতরাং বামতমটি +=কার্যকর করছে 10 += 70


4
এটি বাদামের শেলের মধ্যে এটি দুর্দান্তভাবে রাখে।
আগুনজু

এটি আসলে অপেরাডগুলি যা বাম থেকে ডানে মূল্যায়ন করা হয়।
অলিভিয়ার জ্যাকট-ডেসকোম্বেস

0

আমি জিসিসি এবং পিজিসিসি দিয়ে উদাহরণটি চেষ্টা করেছি এবং ১১০ পেয়েছি they

k = 10;
c = 30;
k = c+k;
c = c+k;
k = c+k;

যা আমার কাছে যুক্তিসঙ্গত লাগে।


-1

এই ধরণের চেইন অ্যাসাইনমেন্টের জন্য, আপনাকে সবচেয়ে ডান দিক থেকে শুরু করে মানগুলি নির্ধারণ করতে হবে। আপনাকে নির্ধারণ করতে হবে এবং গণনা করতে হবে এবং এটিকে বাম দিকে নির্ধারিত করতে হবে এবং সর্বশেষে (বামতমতম অ্যাসাইনমেন্ট) এ যেতে হবে, অবশ্যই এটি কে = 80 হিসাবে গণনা করা হয়েছে।


অনুগ্রহ করে এমন উত্তরগুলি পোস্ট করবেন না যা ইতিমধ্যে অন্যান্য অসংখ্য উত্তর কী বলে তা পুনরায় বিবরণ দেয়।
এরিক লিপার্ট

-1

সহজ উত্তর: মানগুলি দিয়ে ভারগুলি প্রতিস্থাপন করুন এবং আপনি এটি পেয়েছেন:

int k = 10;
int c = 30;
k += c += k += c;
10 += 30 += 10 += 30
= 10 + 30 + 10 + 30
= 80 !!!

এই উত্তরটি ভুল। যদিও এই কৌশলটি এই নির্দিষ্ট ক্ষেত্রে কাজ করে তবে সেই অ্যালগরিদম সাধারণভাবে কাজ করে না। উদাহরণস্বরূপ, এর k = 10; m = (k += k) + k;অর্থ নয় m = (10 + 10) + 10পরিবর্তিত ভাবের ভাষাগুলি বিশ্লেষণ করা যায় না যেমন তাদের আগ্রহী মূল্য প্রতিস্থাপন রয়েছে । রূপান্তরগুলির ক্ষেত্রে একটি বিশেষ ক্রমে মান প্রতিস্থাপন ঘটে এবং আপনাকে অবশ্যই এটি বিবেচনায় নিতে হবে।
এরিক লিপার্ট

-1

আপনি গণনা করে এটি সমাধান করতে পারেন।

a = k += c += k += c

দুটি cএস এবং টু kতাই আছে

a = 2c + 2k

এবং ভাষাটির অপারেটরগুলির ফলাফল হিসাবে, k সমান2c + 2k

এটি এই শৈলীর শৈলীতে ভেরিয়েবলের কোনও সংমিশ্রনের জন্য কাজ করবে:

a = r += r += r += m += n += m

তাই

a = 2m + n + 3r

এবং rসমান হবে।

আপনি অন্যান্য সংখ্যাগুলির মানগুলি কেবলমাত্র তাদের বামতম কার্যবিধি নির্ণয় করে কাজ করতে পারেন। তাই mসমান 2m + nএবং nসমান n + m

এটি প্রমাণ করে যে k += c += k += c;এটি আলাদা k += c; c += k; k += c;এবং তাই কেন আপনি আলাদা উত্তর পান।

মন্তব্যে কিছু লোকেরা উদ্বিগ্ন বলে মনে হচ্ছে যে আপনি এই শর্টকাট থেকে সমস্ত সম্ভাব্য প্রকারের সংযোজনকে সাধারণ করার চেষ্টা করতে পারেন। সুতরাং, আমি এটি পরিষ্কার করে দেব যে এই শর্টকাটটি কেবলমাত্র এই পরিস্থিতির জন্য প্রযোজ্য, অর্থাত্ সংখ্যার জন্য নির্মিত সংযোজন অ্যাসাইনমেন্টগুলি একসাথে জড়িত। এটা তোলে না (অগত্যা) কাজ যদি আপনি অন্যান্য অপারেটরদের যোগ করুন, যেমন করে ()বা +, অথবা আপনি ফাংশান কল অথবা আপনি ওভাররাইড করে থাকেন যদি +=, অথবা আপনি মৌলিক সংখ্যা ধরনের ছাড়া অন্য কিছু ব্যবহার করছেন পারেন। এটি কেবল প্রশ্নের নির্দিষ্ট পরিস্থিতিটি নিয়ে সহায়তা করার জন্য


এটি প্রশ্নের উত্তর দেয় না
জননি 5

@ জননি 5 এটি ব্যাখ্যা করে যে আপনি কীভাবে ফলাফল পেয়েছেন, অর্থাত্ এটি কারণ গণিতগুলি কাজ করে।
ম্যাট এলেন

4
গণিত এবং ক্রিয়াকলাপগুলির ক্রম যা কোনও সংকলক একটি বিবৃতি উত্সাহিত করে তা দুটি ভিন্ন জিনিস। আপনার যুক্তির অধীনে কে + = সি; সি + = কে; k + = c একই ফলাফলের মূল্যায়ন করা উচিত।
জননি 5

না, জননি 5, এর অর্থ কী তা নয়। গাণিতিকভাবে তারা বিভিন্ন জিনিস। তিনটি পৃথক অপারেশন 3 সি + 2 কে মূল্যায়ন করে।
ম্যাট এলেন

4
দুর্ভাগ্যক্রমে আপনার "বীজগণিত" সমাধানটি কেবল কাকতালীয়ভাবে সঠিক। আপনার কৌশলটি সাধারণভাবে কাজ করে না । বিবেচনা করুন x = 1;এবং y = (x += x) + x;এটি কি আপনার যুক্তি যে "তিনটি এক্স এর রয়েছে তাই y এর সমান 3 * x?" কারণ এই ক্ষেত্রে yসমান 4। এখন y = x + (x += x);আপনার যুক্তির কী হবে যে বীজগণিত আইন "a + b = b + a" পূর্ণ হয় এবং এটিও 4? কারণ এটি ৩। দুর্ভাগ্যক্রমে, সি # হাইস্কুল বীজগণিতের নিয়মগুলি অনুসরণ করে না যদি অভিব্যক্তিতে পার্শ্ব প্রতিক্রিয়া থাকে । সি # একটি পার্শ্বপ্রতিক্রিয়া বীজগণিতের নিয়ম অনুসরণ করে।
এরিক লিপার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.