സി പ്രവർത്തനങ്ങളുടെ നിർവ്വഹണത്തിൻ്റെ മുൻഗണനയും ക്രമവും. നിർവ്വഹണത്തിൻ്റെ മുൻഗണനയും ക്രമവും. സിയിലെ പ്രാഥമിക I/O

മുൻഗണനയും നിർവ്വഹണ ക്രമവും

സി ഓപ്പറേറ്റർമാരുടെ മുൻഗണനയും അസോസിയേറ്റിവിറ്റിയും ഒരു എക്സ്പ്രഷനിൽ ഓപ്പറണ്ടുകളെ ഗ്രൂപ്പുചെയ്യുകയും പ്രവർത്തനങ്ങൾ വിലയിരുത്തുകയും ചെയ്യുന്ന ക്രമത്തെ സ്വാധീനിക്കുന്നു. വ്യത്യസ്ത മുൻഗണനകളുള്ള നിരവധി പ്രവർത്തനങ്ങൾ ഉള്ളപ്പോൾ മാത്രമാണ് പ്രവർത്തനങ്ങളുടെ മുൻഗണന പ്രസക്തമാകുന്നത്. ഉയർന്ന മുൻഗണനയുള്ള ഓപ്പറേറ്റർമാരുള്ള എക്സ്പ്രഷനുകൾ ആദ്യം വിലയിരുത്തപ്പെടുന്നു.

പട്ടിക 4.1 മുൻഗണനയുടെ അവരോഹണ ക്രമത്തിൽ പ്രവർത്തനങ്ങൾ ലിസ്റ്റ് ചെയ്യുന്നു. ഒരേ ടേബിൾ വരിയിൽ സ്ഥിതി ചെയ്യുന്ന അല്ലെങ്കിൽ ഒരു ഗ്രൂപ്പായി സംയോജിപ്പിച്ചിരിക്കുന്ന പ്രവർത്തനങ്ങൾക്ക് ഒരേ മുൻഗണനയും ഒരേ അസോസിയേറ്റിവിറ്റിയും ഉണ്ട്.

പട്ടിക 4.1.

സി ഭാഷയിലെ പ്രവർത്തനങ്ങളുടെ മുൻഗണനയും അസോസിയേറ്റിവിറ്റിയും

പ്രവർത്തന ചിഹ്നം പേര് സഹവാസം
() . -> പ്രാഥമികം ഇടത്തുനിന്ന് വലത്തോട്ട്
+ - ~ ! * & ++ -- തരം കാസ്റ്റ് വലുപ്പം യുണറി വലത്തുനിന്ന് ഇടത്തോട്ട്
* / % ഗുണിതം ഇടത്തുനിന്ന് വലത്തോട്ട്
+ - കൂട്ടിച്ചേർക്കൽ ഇടത്തുനിന്ന് വലത്തോട്ട്
>> << ഷിഫ്റ്റ് ഇടത്തുനിന്ന് വലത്തോട്ട്
< > <= >= മനോഭാവം ഇടത്തുനിന്ന് വലത്തോട്ട്
== != മനോഭാവം ഇടത്തുനിന്ന് വലത്തോട്ട്
& ബിറ്റ്വൈസ് AND ഇടത്തുനിന്ന് വലത്തോട്ട്
^ ബിറ്റ്‌വൈസ് എക്‌സ്‌ക്ലൂസീവ് അല്ലെങ്കിൽ ഇടത്തുനിന്ന് വലത്തോട്ട്
| ബിറ്റ്വൈസ് ഇൻക്ലൂസീവ് അല്ലെങ്കിൽ ഇടത്തുനിന്ന് വലത്തോട്ട്
&& ലോജിക്കൽ AND ഇടത്തുനിന്ന് വലത്തോട്ട്
|| ലോജിക്കൽ OR ഇടത്തുനിന്ന് വലത്തോട്ട്
?: സോപാധികം വലത്തുനിന്ന് ഇടത്തോട്ട്
= *= /= %= += -= <<= >>= &= |= ^= ലളിതവും സംയുക്തവുമായ നിയമനം വലത്തുനിന്ന് ഇടത്തോട്ട്
, തുടർച്ചയായ കണക്കുകൂട്ടൽ ഇടത്തുനിന്ന് വലത്തോട്ട്

പട്ടിക 4.1 ൽ നിന്ന്. ഫംഗ്‌ഷൻ കോൾ, ഇൻഡക്‌സ് എക്‌സ്‌പ്രഷൻ, എലമെൻ്റ് സെലക്ഷൻ എക്‌സ്‌പ്രഷൻ, പാരന്തറ്റിക്കൽ എക്‌സ്‌പ്രഷൻ എന്നിവയെ പ്രതിനിധീകരിക്കുന്ന ഓപ്പറണ്ടുകൾക്ക് ഏറ്റവും ഉയർന്ന മുൻഗണനയും ഇടത്തുനിന്ന് വലത്തോട്ട് അസോസിയേറ്റിവിറ്റിയും ഉണ്ടെന്ന് ഇത് പിന്തുടരുന്നു. ടൈപ്പ് കാസ്റ്റിംഗിന് ഏകീകൃത ഓപ്പറേറ്റർമാരുടെ അതേ മുൻഗണനയും നിർവ്വഹണ ക്രമവും ഉണ്ട്.

ഒരു എക്സ്പ്രഷനിൽ ഒരേ മുൻഗണനയുള്ള നിരവധി പ്രവർത്തനങ്ങൾ അടങ്ങിയിരിക്കാം. ഒരേ മുൻഗണനാ തലത്തിലുള്ള ഒന്നിലധികം ഓപ്പറേറ്റർമാർ ഒരു എക്‌സ്‌പ്രഷനിൽ ദൃശ്യമാകുമ്പോൾ, അവ അവരുടെ അസ്സോസിയേറ്റിവിറ്റി അനുസരിച്ച് പ്രയോഗിക്കുന്നു - ഒന്നുകിൽ വലത്തുനിന്ന് ഇടത്തോട്ടോ ഇടത്തുനിന്ന് വലത്തോട്ടോ.

ചില പ്രവർത്തനങ്ങൾക്ക്, പ്രത്യേകിച്ച് ഷിഫ്റ്റ്, ബിറ്റ്വൈസ് പ്രവർത്തനങ്ങൾക്ക് സി ഭാഷ ഒരു നിർഭാഗ്യകരമായ മുൻഗണന ക്രമം സ്വീകരിക്കുന്നു എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്. അവർക്ക് മുൻഗണന കുറവാണ് ഗണിത പ്രവർത്തനങ്ങൾ(കൂടാതെ, മുതലായവ). അതുകൊണ്ട് ആവിഷ്കാരം

a = b & 0xFF + 5

ആയി കണക്കാക്കുന്നു

a = b & (0xFF + 5),

പ്രയോഗവും

a +c >> 1

ആയി കണക്കാക്കുന്നു

(a + c) >> 1

ഗുണിതവും അഡിറ്റീവും ബിറ്റ്‌വൈസ് പ്രവർത്തനങ്ങളും കമ്മ്യൂട്ടാറ്റിവിറ്റിയുടെ സ്വത്താണ്. ഒരേ മുൻഗണനയുള്ള നിരവധി കമ്മ്യൂട്ടേറ്റീവ് പ്രവർത്തനങ്ങൾ ഉൾപ്പെടുന്ന ഒരു എക്‌സ്‌പ്രഷൻ വിലയിരുത്തുന്നതിൻ്റെ ഫലം ഈ പ്രവർത്തനങ്ങൾ നടത്തുന്ന ക്രമത്തെ ആശ്രയിക്കുന്നില്ല എന്നാണ് ഇതിനർത്ഥം. അതിനാൽ, മൂല്യനിർണ്ണയ ക്രമം വ്യക്തമാക്കുന്ന പദപ്രയോഗത്തിൽ പരാൻതീസിസുകൾ അടങ്ങിയിട്ടുണ്ടെങ്കിലും, അത്തരം പദപ്രയോഗങ്ങളെ ഏത് ക്രമത്തിലും വിലയിരുത്താനുള്ള അവകാശം കംപൈലറിൽ നിക്ഷിപ്തമാണ്.

SP TS unary plus ഓപ്പറേഷൻ നടപ്പിലാക്കുന്നു, ഇത് പരാൻതീസിസിലെ എക്സ്പ്രഷനുകളുടെ കണക്കുകൂട്ടൽ ക്രമം ഉറപ്പ് നൽകാൻ നിങ്ങളെ അനുവദിക്കുന്നു.

ഓപ്പറേഷൻ തുടർച്ചയായ കണക്കുകൂട്ടൽ, ലോജിക്കൽ പ്രവർത്തനങ്ങൾ AND കൂടാതെ OR, സോപാധിക ഓപ്പറേറ്ററും ഫംഗ്‌ഷൻ കോൾ ഓപ്പറേറ്ററും അവരുടെ പ്രവർത്തനങ്ങളെ വിലയിരുത്തുന്ന ഒരു പ്രത്യേക ക്രമം ഉറപ്പ് നൽകുന്നു. ഒരു സീക്വൻഷ്യൽ മൂല്യനിർണ്ണയ പ്രവർത്തനം അതിൻ്റെ ഓപ്പറണ്ടുകൾ ഇടത്തുനിന്ന് വലത്തോട്ട് മൂല്യനിർണ്ണയം നടത്തുന്നുവെന്ന് ഉറപ്പാക്കുന്നു (ഒരു ഫംഗ്‌ഷൻ കോളിലെ ആർഗ്യുമെൻ്റുകളെ കോമ വേർതിരിക്കുന്നത് ഒരു തുടർച്ചയായ മൂല്യനിർണ്ണയ പ്രവർത്തനമല്ല, മാത്രമല്ല അത്തരം ഗ്യാരണ്ടികൾ നൽകുന്നില്ല). ഫംഗ്ഷൻ വിളിക്കപ്പെടുമ്പോഴേക്കും എല്ലാ ആർഗ്യുമെൻ്റുകളും ഇതിനകം തന്നെ കണക്കുകൂട്ടിക്കഴിഞ്ഞുവെന്ന് ഉറപ്പുനൽകുന്നു.

ഒരു സോപാധിക പ്രവർത്തനം അതിൻ്റെ ആദ്യ ഓപ്പറണ്ടിനെ ആദ്യം വിലയിരുത്തുന്നു, തുടർന്ന്, അതിൻ്റെ മൂല്യത്തെ ആശ്രയിച്ച്, അതിൻ്റെ രണ്ടാമത്തേതോ മൂന്നാമത്തേതോ.

ലോജിക്കൽ ഓപ്പറേഷനുകളും അവയുടെ പ്രവർത്തനങ്ങളെ ഇടത്തുനിന്ന് വലത്തോട്ട് വിലയിരുത്തുന്നു. എന്നിരുന്നാലും, ഒരു പദപ്രയോഗത്തിൻ്റെ ഫലം നിർണ്ണയിക്കാൻ ആവശ്യമായ ഏറ്റവും കുറഞ്ഞ ഓപ്പറണ്ടുകളുടെ എണ്ണം ലോജിക്കൽ പ്രവർത്തനങ്ങൾ വിലയിരുത്തുന്നു. അതിനാൽ, പദപ്രയോഗത്തിൻ്റെ രണ്ടാമത്തെ ഓപ്പറണ്ടിനെ വിലയിരുത്താൻ കഴിയില്ല.

int x, y, z, f();

z = x > y || f(x, y);

ആദ്യം, x>y എന്ന പദപ്രയോഗം കണക്കാക്കുന്നു. ഇത് ശരിയാണെങ്കിൽ, z എന്ന വേരിയബിളിന് മൂല്യം 1 നൽകുന്നു, കൂടാതെ f ഫംഗ്‌ഷൻ വിളിക്കപ്പെടുന്നില്ല. x ൻ്റെ മൂല്യം y-നേക്കാൾ വലുതല്ലെങ്കിൽ, f(x,y) എന്ന പദപ്രയോഗം കണക്കാക്കുന്നു. ഫംഗ്ഷൻ പൂജ്യമല്ലാത്ത ഒരു മൂല്യം നൽകുന്നുവെങ്കിൽ, വേരിയബിൾ z ന് 1 അസൈൻ ചെയ്യപ്പെടും, അല്ലാത്തപക്ഷം 0. ഫംഗ്‌ഷനെ വിളിക്കുമ്പോൾ, അതിൻ്റെ ആദ്യ ആർഗ്യുമെൻ്റിൻ്റെ മൂല്യം രണ്ടാമത്തേതിനേക്കാൾ വലുതാണെന്ന് ഉറപ്പുനൽകുന്നു.

പരിഗണിക്കപ്പെട്ട ഉദാഹരണം ലോജിക്കൽ പ്രവർത്തനങ്ങളുടെ നിർവ്വഹണ ക്രമം ഉപയോഗിക്കുന്നതിനുള്ള പ്രധാന സാധ്യതകൾ കാണിക്കുന്നു. ഇത്, ഒന്നാമതായി, ലോജിക്കൽ പ്രവർത്തനങ്ങളുടെ ആദ്യ ഓപ്പറണ്ടുകളായി ഏറ്റവും സാധ്യതയുള്ള വ്യവസ്ഥകൾ സ്ഥാപിക്കുന്നതിലൂടെ കാര്യക്ഷമതയിലെ വർദ്ധനവാണ്. രണ്ടാമതായി, ഒരു എക്സ്പ്രഷനിലേക്ക് ചെക്കുകൾ ചേർക്കുന്നത് സാധ്യമാണ്, അവ തെറ്റാണെങ്കിൽ, തുടർന്നുള്ള പ്രവർത്തനങ്ങൾ നടക്കില്ല. അതിനാൽ, അടുത്തതിൽ സോപാധിക ഓപ്പറേറ്റർ എങ്കിൽഫയലിൻ്റെ അവസാനം ഇതുവരെ എത്തിയിട്ടില്ലെങ്കിൽ മാത്രമേ ഫയലിൽ നിന്ന് അടുത്ത പ്രതീകം വായിക്കുകയുള്ളൂ:

എങ്കിൽ(!feof(pf)) && (c = getc(pf)) ...

ഇവിടെ feof- എൻഡ്-ഓഫ്-ഫയൽ പരിശോധന പ്രവർത്തനം, getc- ഒരു ഫയലിൽ നിന്ന് ഒരു ചിഹ്നം വായിക്കുന്നതിനുള്ള പ്രവർത്തനം (വിഭാഗം 12 കാണുക).

മൂന്നാമതായി, പദപ്രയോഗത്തിൽ നമുക്ക് അത് ഉറപ്പുനൽകാൻ കഴിയും f(x)&&g(y)പ്രവർത്തനം എഫ്ചടങ്ങിന് മുമ്പ് വിളിക്കും ജി. ആവിഷ്കാരത്തിന് f(x)+g(y)ഇത് പറയാനാവില്ല.

ഇനിപ്പറയുന്ന ഉദാഹരണങ്ങൾ വിവിധ എക്സ്പ്രഷനുകൾക്കായി ഓപ്പറണ്ടുകളുടെ ഗ്രൂപ്പിംഗ് കാണിക്കുന്നു.

എക്സ്പ്രഷൻ പ്രവർത്തന ഗ്രൂപ്പിംഗ്
a&b || സി (എ & ബി) || സി
a = b || സി a = (b || c)
q && r || s-- (q && r) || (s--)
p == 0 ? p += 1: p += 2 (p == 0 ? p += 1: p) += 2

ആദ്യ ഉദാഹരണത്തിൽ, ബിറ്റ്‌വൈസ് AND ഓപ്പറേറ്ററിന് (&) -ലോജിക്കൽ അല്ലെങ്കിൽ ഓപ്പറേറ്ററിനേക്കാൾ (||) ഉയർന്ന മുൻഗണനയുണ്ട്, അതിനാൽ എക്സ്പ്രഷൻ a&bലോജിക്കൽ OR ഓപ്പറേഷൻ്റെ ആദ്യ ഓപ്പറണ്ടാണ്.

രണ്ടാമത്തെ ഉദാഹരണത്തിൽ, ലോജിക്കൽ OR ഓപ്പറേറ്ററിന് (||) ലളിതമായ അസൈൻമെൻ്റ് ഓപ്പറേറ്ററേക്കാൾ ഉയർന്ന മുൻഗണനയുണ്ട്, അതിനാൽ എക്സ്പ്രഷൻ ബി||സിഅസൈൻമെൻ്റ് ഓപ്പറേഷൻ്റെ ശരിയായ പ്രവർത്തനരീതി രൂപപ്പെടുത്തുന്നു. (അസൈൻ ചെയ്‌ത മൂല്യം ശ്രദ്ധിക്കുക , പൂജ്യമോ ഒന്നോ ആണ്.)

തുടക്കക്കാർക്ക് C++

4.13 മുൻഗണനകൾ

പ്രവർത്തന മുൻഗണനകൾ സങ്കീർണ്ണമായ ഒരു എക്സ്പ്രഷനിലെ കണക്കുകൂട്ടലുകളുടെ ക്രമം വ്യക്തമാക്കുന്നു. ഉദാഹരണത്തിന്, ഇവാലിന് എന്ത് മൂല്യം ലഭിക്കും?

Int ival = 6 + 3 * 4 / 2 + 2;

നിങ്ങൾ ഇടത്തുനിന്ന് വലത്തോട്ട് പ്രവർത്തനങ്ങൾ കണക്കാക്കിയാൽ, നിങ്ങൾക്ക് 20 ലഭിക്കും. സാധ്യമായ മറ്റ് ഫലങ്ങളിൽ 9, 14, 36 എന്നിവ ഉൾപ്പെടുന്നു. ശരിയായ ഉത്തരം 14 ആണ്.
C++ ൽ, ഗുണനത്തിനും വിഭജനത്തിനും സങ്കലനത്തേക്കാൾ ഉയർന്ന മുൻഗണനയുണ്ട്, അതിനാൽ അവ ആദ്യം വിലയിരുത്തപ്പെടും. അവരുടെ സ്വന്തം മുൻഗണനകൾ തുല്യമാണ്, അതിനാൽ ഗുണനവും വിഭജനവും ഇടത്തുനിന്ന് വലത്തോട്ട് വിലയിരുത്തും. അങ്ങനെ, കണക്കുകൂട്ടലിൻ്റെ ക്രമം എക്സ്പ്രഷൻ നൽകിആണ്:

1. 3 * 4 => 12 2. 12 / 2 => 6 3. 6 + 6 => 12 4. 12 + 2 => 14

ഇനിപ്പറയുന്ന ഡിസൈൻ ഒരാൾ പ്രതീക്ഷിക്കുന്നത് പോലെ പെരുമാറുന്നില്ല. അസൈൻമെൻ്റ് പ്രവർത്തനത്തിൻ്റെ മുൻഗണന താരതമ്യ പ്രവർത്തനത്തേക്കാൾ കുറവാണ്:

അതേസമയം (ch = nextChar() != "\n")

ch എന്ന വേരിയബിളിന് ഒരു മൂല്യം നൽകാനും അത് പ്രതീകത്തിന് തുല്യമാണോ എന്ന് പരിശോധിക്കാനും പ്രോഗ്രാമർ ആഗ്രഹിച്ചു പുതിയ വര. എന്നിരുന്നാലും, എക്‌സ്‌പ്രഷൻ ആദ്യം നെക്സ്റ്റ്‌ചാർ() നൽകിയ മൂല്യത്തെ "\n" എന്നതുമായി താരതമ്യം ചെയ്യുകയും ഫലം - ശരിയോ തെറ്റോ - വേരിയബിളിലേക്ക് അസൈൻ ചെയ്യുകയും ചെയ്യുന്നു.
പരാൻതീസിസുകൾ ഉപയോഗിച്ച് പ്രവർത്തന മുൻഗണനകൾ മാറ്റാവുന്നതാണ്. പരാൻതീസിസിലെ എക്സ്പ്രഷനുകൾ ആദ്യം വിലയിരുത്തുന്നു. ഉദാഹരണത്തിന്:

4 * 5 + 7 * 2 ==> 34 4 * (5 + 7 * 2) ==> 76 4 * ((5 + 7) * 2) ==> 96

മുമ്പത്തെ ഉദാഹരണത്തിൻ്റെ സ്വഭാവം ശരിയാക്കാൻ പരാൻതീസിസ് എങ്ങനെ ഉപയോഗിക്കാമെന്നത് ഇതാ:

അതേസമയം ((ch = nextChar()) != "\n")

ഓപ്പറേറ്റർമാർക്ക് ഉണ്ട് ഒപ്പം മുൻഗണന, ഒപ്പം സഹവാസം. അസൈൻമെൻ്റ് ഓപ്പറേറ്റർ വലത്-അസോസിയേറ്റീവ് ആണ്, അതിനാൽ ഇത് വലത്തുനിന്ന് ഇടത്തോട്ട് വിലയിരുത്തപ്പെടുന്നു:

ഇവൾ = jval = kva1 = lval

ആദ്യം kval-ന് lval-ൻ്റെ മൂല്യം ലഭിക്കുന്നു, തുടർന്ന് jval-ന് ആ അസൈൻമെൻ്റിൻ്റെ ഫലത്തിൻ്റെ മൂല്യം ലഭിക്കുന്നു, ഒടുവിൽ ival-ന് jval-ൻ്റെ മൂല്യം ലഭിക്കുന്നു.
ഗണിത പ്രവർത്തനങ്ങൾ, നേരെമറിച്ച്, അനുബന്ധമായി അവശേഷിക്കുന്നു. അതിനാൽ, പദപ്രയോഗത്തിൽ

ഇവൽ + ജ്വൽ + kva1 + 1va1

ആദ്യം ival, jval എന്നിവ ചേർക്കുന്നു, തുടർന്ന് kval ഫലത്തിലേക്ക് ചേർക്കുന്നു, തുടർന്ന് lval.
പട്ടിക 4.4 കാണിക്കുന്നു മുഴുവൻ പട്ടിക C++ ഓപ്പറേറ്റർമാർ മുൻഗണനയുടെ അവരോഹണ ക്രമത്തിൽ. ഒരേ ടേബിൾ സെക്ഷനിലെ ഓപ്പറേറ്റർമാർക്ക് തുല്യ മുൻഗണനയുണ്ട്. ഒരു വിഭാഗത്തിലെ എല്ലാ ഓപ്പറേറ്റർമാർക്കും അതിനെ പിന്തുടരുന്ന വിഭാഗങ്ങളിലെ ഓപ്പറേറ്റർമാരേക്കാൾ ഉയർന്ന മുൻഗണനയുണ്ട്. അതിനാൽ, ഗുണനത്തിനും വിഭജനത്തിനും ഒരേ മുൻഗണനയുണ്ട്, ഇത് ഏതെങ്കിലും താരതമ്യ പ്രവർത്തനങ്ങളുടെ മുൻഗണനയേക്കാൾ ഉയർന്നതാണ്.

വ്യായാമം 4.18

ഇനിപ്പറയുന്ന പദപ്രയോഗങ്ങൾ മൂല്യനിർണ്ണയം ചെയ്യുന്ന ക്രമം എന്താണ്? ഉത്തരം നൽകാൻ പട്ടിക 4.4 ഉപയോഗിക്കുക.

(എ)! ptr == ptr->അടുത്തത് (b) ~ uc ^ 0377 & ui<< 4 (c) ch = buf[ bp++ ] != "\n"

വ്യായാമം 4.19

മുമ്പത്തെ വ്യായാമത്തിൽ നിന്നുള്ള മൂന്ന് പദപ്രയോഗങ്ങളും പ്രോഗ്രാമർ ഉദ്ദേശിച്ചതിനേക്കാൾ വ്യത്യസ്തമായ ക്രമത്തിലാണ് വിലയിരുത്തുന്നത്. അവൻ്റെ യഥാർത്ഥ ഉദ്ദേശം കൈവരിക്കാൻ ബ്രാക്കറ്റുകൾ ക്രമീകരിക്കുക.

വ്യായാമം 4.20

തെറ്റായി മനസ്സിലാക്കിയ ഓപ്പറേറ്റർ മുൻഗണന കാരണം ഇനിപ്പറയുന്ന പദപ്രയോഗങ്ങൾ ഒരു സമാഹാര പിശകിന് കാരണമാകുന്നു. പട്ടിക 4.4 ഉപയോഗിച്ച് അവ എങ്ങനെ ശരിയാക്കാമെന്ന് വിശദീകരിക്കുക.

(a) int i = doSomething(), 0; (ബി)കൗട്ട്<< ival % 2 ? "odd" : "even";

പട്ടിക 4.4. പ്രവർത്തന മുൻഗണനകൾ

ഓപ്പറേറ്റർ അർത്ഥം ഉപയോഗം
:: ആഗോള വ്യാപ്തി :: പേര്
:: ക്ലാസ് സ്കോപ്പ് ക്ലാസ്:: പേര്
:: നെയിംസ്പേസ് സ്കോപ്പ് namespace::name
. അംഗങ്ങളുടെ പ്രവേശനം വസ്തു.അംഗം
-> പോയിൻ്റർ വഴി ഒരു അംഗത്തെ ആക്സസ് ചെയ്യുന്നു പോയിൻ്റർ-> അംഗം
സൂചിക എടുക്കുന്നു വേരിയബിൾ
() ഒരു ഫംഗ്‌ഷൻ വിളിക്കുന്നു പേര് (expr_list)
() അർത്ഥത്തിൻ്റെ നിർമ്മാണം തരം (expr_list)
++ പോസ്റ്റ്ഫിക്സ് ഇൻക്രിമെൻ്റ് മൂല്യം++
പോസ്റ്റ്ഫിക്സ് ഡിക്രിമെൻ്റ് മൂല്യം--
ടൈപ്പിഡ് ടൈപ്പ് ഐഡൻ്റിഫയർ ടൈപ്പ്ഡ്(തരം)
ടൈപ്പിഡ് എക്സ്പ്രഷൻ തരം ഐഡൻ്റിഫയർ ടൈപ്പിഡ് (എക്സ്പ്രർ)
തരം പരിവർത്തനം const_cast (എക്സ്പ്രർ)
തരം പരിവർത്തനം ഡൈനാമിക്_കാസ്റ്റ് (എക്സ്പ്രർ)
പുനർവ്യാഖ്യാനം_കാസ്റ്റ് കാസ്റ്റിംഗ് പുനർവ്യാഖ്യാനം_കാസ്റ്റ് (എക്സ്പ്രർ)
സ്റ്റാറ്റിക്_കാസ്റ്റ് കാസ്റ്റിംഗ് സ്റ്റാറ്റിക്_കാസ്റ്റ് (എക്സ്പ്രർ)
വലിപ്പം വസ്തുവിൻ്റെ വലിപ്പം എക്സ്പ്രറിൻ്റെ വലിപ്പം
വലിപ്പം വലിപ്പം തരം വലിപ്പം(തരം)
++ പ്രിഫിക്സ് ഇൻക്രിമെൻ്റ് ++ മൂല്യം
-- പ്രിഫിക്സ് ഡിക്രിമെൻ്റ് --വില
~ ബിറ്റ്വൈസ് അല്ല ~എക്സ്പ്രർ
! ലോജിക്കൽ അല്ല !expr
- ഏകീകൃത മൈനസ് -expr
+ ഏകീകൃത പ്ലസ് +expr
* dereferencing *expr
& വിലാസം &expr
() കാസ്റ്റിംഗ് (തരം) expr
പുതിയത് മെമ്മറി അലോക്കേഷൻ പുതിയ തരം
പുതിയത് മെമ്മറി അലോക്കേഷനും സമാരംഭവും പുതിയ തരം (എക്‌സ്‌പ്രലിസ്റ്റ്)
പുതിയത് ഒരു അറേയ്‌ക്കുള്ള മെമ്മറിയുടെ അലോക്കേഷൻ എല്ലാ രൂപങ്ങളും
ഇല്ലാതാക്കുക മെമ്മറി സ്വതന്ത്രമാക്കുന്നു എല്ലാ രൂപങ്ങളും
ഇല്ലാതാക്കുക ഒരു അറേയിൽ നിന്ന് മെമ്മറി സ്വതന്ത്രമാക്കുന്നു എല്ലാ രൂപങ്ങളും
->* പോയിൻ്റർ വഴി ഒരു ക്ലാസ് അംഗത്തെ ആക്സസ് ചെയ്യുന്നു pointer-> *pointer_to_member
.* പോയിൻ്റർ വഴി ഒരു ക്ലാസ് അംഗത്തെ ആക്സസ് ചെയ്യുന്നു ഒബ്ജക്റ്റ്.*അംഗത്തിലേക്കുള്ള_പോയിൻ്റർ
* ഗുണനം expr * expr
/ ഡിവിഷൻ expr/expr
% മൊഡ്യൂളോ ഡിവിഷൻ എക്സ്പ്രർ% എക്സ്പ്രർ
+ കൂട്ടിച്ചേർക്കൽ expr + expr
- കുറയ്ക്കൽ expr - expr
<< ഇടത്തേക്ക് മാറുക exr<< expr
>> വലത്തേക്ക് മാറുക expr >> expr
< കുറവ് exr< expr
<= കുറവ് അല്ലെങ്കിൽ തുല്യം exr<= expr
> കൂടുതൽ expr > expr
>= കൂടുതലോ തുല്യമോ expr >= expr
== തുല്യമാണ് expr == expr
!= തുല്യമല്ല expr != expr
& ബിറ്റ്വൈസ് ആൻഡ് expr & expr
^ ബിറ്റ്വൈസ് എക്സ്ക്ലൂസീവ് അല്ലെങ്കിൽ expr^expr
| ബിറ്റ്വൈസ് അല്ലെങ്കിൽ expr | exr
&& ലോജിക്കൽ AND expr && expr
|| ലോജിക്കൽ OR expr || exr
?: സോപാധിക ഓപ്പറേറ്റർ എക്സ്പിആർ? expr * expr
= നിയമനം l-മൂല്യം = expr
=, *=, /=, %=, +=, -=, <<=, >>=, &=, |=, ^= സംയുക്ത നിയമനം l-value += expr തുടങ്ങിയവ.
എറിയുക ഒരു അപവാദം ഉയർത്തുന്നു എക്‌സ്‌പിആർ എറിയുക
, കോമ expr, expr

എക്‌സ്‌പ്രഷനുകൾ ശരിയായി വിലയിരുത്തുന്നതിന് (4 + 2 * 3 പോലുള്ളവ), ഏത് ഓപ്പറേറ്റർമാർ എന്താണ് അർത്ഥമാക്കുന്നത്, ഏത് ക്രമത്തിലാണ് അവ പ്രയോഗിക്കേണ്ടതെന്ന് ഞങ്ങൾ അറിഞ്ഞിരിക്കണം. അവ നടപ്പിലാക്കുന്ന ഈ ശ്രേണിയെ വിളിക്കുന്നു പ്രവർത്തനങ്ങളുടെ മുൻഗണന. പിന്തുടരുന്നു സാധാരണ നിയമങ്ങൾഗണിതശാസ്ത്രം (ഇതിൽ സങ്കലനത്തിന് മുമ്പ് ഗുണനം ചെയ്യണം), മുകളിലുള്ള പദപ്രയോഗം - 4 + (2 * 3) ആയി പരിഹരിച്ചിരിക്കുന്നു, ഫലം മൂല്യം 10 ​​ആണ്.

C++ ൽ, എല്ലാ ഓപ്പറേറ്റർമാർക്കും (പ്രവർത്തനങ്ങൾ) അവരുടേതായ മുൻഗണനാ തലമുണ്ട്. അതിൽ കൂടുതലുള്ളവയാണ് ആദ്യം നടപ്പിലാക്കുന്നത്. താഴെയുള്ള പട്ടികയിൽ ഗുണന, ഹരിക്കൽ പ്രവർത്തനങ്ങളുടെ മുൻഗണന (5) സങ്കലന, വ്യവകലന പ്രവർത്തനങ്ങളേക്കാൾ ഉയർന്നതാണെന്ന് നിങ്ങൾക്ക് കാണാൻ കഴിയും (6). എക്സ്പ്രഷനുകൾ പ്രോസസ്സ് ചെയ്യുന്ന ക്രമം നിർണ്ണയിക്കാൻ കംപൈലർ ഇത് ഉപയോഗിക്കുന്നു.

എന്നാൽ ഒരു എക്‌സ്‌പ്രഷനിലെ രണ്ട് ഓപ്പറേറ്റർമാർക്ക് ഒരേ മുൻഗണന ലെവൽ ഉണ്ടായിരിക്കുകയും പരസ്പരം അടുത്ത് സ്ഥാപിക്കുകയും ചെയ്താലോ? ഏത് ഓപ്പറേഷൻ ആണ് ആദ്യം ചെയ്യേണ്ടത്? ഇവിടെ കമ്പൈലർ ഉപയോഗിക്കും സഹവാസ നിയമങ്ങൾ,ഇത് പ്രവർത്തനങ്ങളുടെ ദിശയെ സൂചിപ്പിക്കുന്നു: ഇടത്തുനിന്ന് വലത്തോട്ട് അല്ലെങ്കിൽ വലത്തുനിന്ന് ഇടത്തേക്ക്. ഉദാഹരണത്തിന്, 3 * 4/2 ൽ, ഗുണനത്തിനും വിഭജനത്തിനും ഒരേ മുൻഗണന ലെവൽ ഉണ്ട് - 5. കൂടാതെ ലെവൽ 5 അസോസിയേറ്റിവിറ്റി ഇടത്തുനിന്ന് വലത്തോട്ടാണ്, അതിനാൽ ഞങ്ങൾ ഇത് ഇതുപോലെ പരിഹരിക്കും: (3 * 4) / 2 = 6.

പ്രവർത്തന മുൻഗണനാ പട്ടിക

കുറിപ്പുകൾ:

1 ഏറ്റവും ഉയർന്ന മുൻഗണനാ തലവും 17 ഏറ്റവും താഴ്ന്നതുമാണ്. കൂടുതൽ ഉള്ള ഇടപാടുകൾ ഉയർന്ന തലംമുൻഗണന ആദ്യം നടപ്പിലാക്കുന്നു.

L -> R എന്നാൽ ഇടത്തുനിന്ന് വലത്തോട്ട്.

R -> L എന്നാൽ വലത്തുനിന്ന് ഇടത്തേക്ക്.

സഹവാസം ഓപ്പറേറ്റർ വിവരണം ഉദാഹരണം
1. നമ്പർ :: ആഗോള വ്യാപ്തി (യൂണറി) :: പേര്
:: ക്ലാസ് സ്കോപ്പ് (ബൈനറി) class_name ::member_name
2. L->R () വൃത്താകൃതിയിലുള്ള ബ്രാക്കറ്റുകൾ (പ്രകടനം)
() ഒരു ഫംഗ്‌ഷൻ വിളിക്കുന്നു function_name(പാരാമീറ്ററുകൾ)
() ആരംഭിക്കൽ തരം പേര് (എക്സ്പ്രഷൻ)
{} ഏകീകൃത സമാരംഭം (C++11) തരം പേര് (എക്സ്പ്രഷൻ)
തരം () ഫങ്ഷണൽ കാസ്റ്റ് new_type(എക്സ്പ്രഷൻ)
തരം () ഫങ്ഷണൽ കാസ്റ്റ് (C++11) new_type(എക്സ്പ്രഷൻ)
അറേ സൂചിക സൂചിക
. ഒരു ഒബ്ജക്റ്റ് അംഗം ആക്സസ് ചെയ്യുന്നു object.member_name
-> ഒരു പോയിൻ്റർ വഴി ഒരു ഒബ്ജക്റ്റ് അംഗം ആക്സസ് ചെയ്യുന്നു object_pointer->member_name
++ പോസ്റ്റ്-ഇൻക്രിമെൻ്റ് മൂല്യം++
–– പോസ്റ്റ്-ഡിക്രിമെൻ്റ് മൂല്യം--
ടൈപ്പിഡ് റൺ-ടൈം തരം വിവരങ്ങൾ ടൈപ്പ്ഡ്(തരം) അല്ലെങ്കിൽ ടൈപ്പിഡ്(എക്സ്പ്രഷൻ)
const_cast കാസ്റ്റ് എവേ കോൺസ്റ്റ് const_cast(എക്സ്പ്രഷൻ)
ഡൈനാമിക്_കാസ്റ്റ് റൺ-ടൈം തരം പരിശോധിച്ച കാസ്റ്റ് ഡൈനാമിക്_കാസ്റ്റ്(എക്സ്പ്രഷൻ)
പുനർവ്യാഖ്യാനം_കാസ്റ്റ് ഒരു തരം മറ്റൊന്നിലേക്ക് കാസ്‌റ്റ് ചെയ്യുക പുനർവ്യാഖ്യാനം_കാസ്റ്റ്(എക്സ്പ്രഷൻ)
സ്റ്റാറ്റിക്_കാസ്റ്റ് കംപൈൽ-ടൈം ടൈപ്പ്-ചെക്ക് ചെയ്ത കാസ്റ്റ് സ്റ്റാറ്റിക്_കാസ്റ്റ്(എക്സ്പ്രഷൻ)
3. R->L + യൂണറി പ്ലസ് +പ്രകടനം
യുണറി മൈനസ് -പ്രകടനം
++ പ്രീ-ഇൻക്രിമെൻ്റ് ++ മൂല്യം
–– പ്രീ-ഡിക്രിമെൻ്റ് –– മൂല്യം
! ലോജിക്കൽ അല്ല (അല്ല) !പ്രകടനം
~ ബിറ്റ്‌വൈസ് അല്ല (അല്ല) ~പ്രകടനം
(തരം) സി-സ്റ്റൈൽ കാസ്റ്റ് (പുതിയ_തരം) എക്സ്പ്രഷൻ
വലിപ്പം ബൈറ്റുകളിൽ വലുപ്പം വലിപ്പം(തരം) അല്ലെങ്കിൽ വലിപ്പം(എക്സ്പ്രഷൻ)
& വിലാസം മൂല്യം
* ഡെററൻസ് *പ്രകടനം
പുതിയത് ഡൈനാമിക് മെമ്മറി അലോക്കേഷൻ പുതിയ തരം
പുതിയത് ഡൈനാമിക് അറേ അലോക്കേഷൻ പുതിയ തരം
ഇല്ലാതാക്കുക ഡൈനാമിക് മെമ്മറി നീക്കംചെയ്യൽ പോയിൻ്റർ ഇല്ലാതാക്കുക
ഇല്ലാതാക്കുക ഡൈനാമിക് അറേ ഇല്ലാതാക്കൽ പോയിൻ്റർ ഇല്ലാതാക്കുക
4. L->R ->* അംഗ പോയിൻ്റർ സെലക്ടർ object_pointer->*pointer_to_member
.* അംഗ ഒബ്ജക്റ്റ് സെലക്ടർ ഒബ്ജക്റ്റ്.*അംഗത്തിലേക്കുള്ള_പോയിൻ്റർ
5. L->R * ഗുണനം എക്സ്പ്രഷൻ * എക്സ്പ്രഷൻ
/ ഡിവിഷൻ എക്സ്പ്രഷൻ / എക്സ്പ്രഷൻ
% ബാക്കിയുള്ളത് എക്സ്പ്രഷൻ % എക്സ്പ്രഷൻ
6. L->R + കൂട്ടിച്ചേർക്കൽ എക്സ്പ്രഷൻ + എക്സ്പ്രഷൻ
കുറയ്ക്കൽ എക്സ്പ്രഷൻ - എക്സ്പ്രഷൻ
7. L->R << ബിറ്റ്വൈസ് ഇടത്തേക്ക് മാറ്റുക ആവിഷ്കാരം<< expression
>> ബിറ്റ്വൈസ് വലത്തേക്ക് മാറ്റുക എക്സ്പ്രഷൻ >> എക്സ്പ്രഷൻ
8. L->R < താരതമ്യം. അതിൽ കുറവ് ആവിഷ്കാരം< expression
<= താരതമ്യം. കുറവോ തുല്യമോ ആവിഷ്കാരം<= expression
> താരതമ്യം. അതിലും കൂടുതൽ എക്സ്പ്രഷൻ > എക്സ്പ്രഷൻ
>= താരതമ്യം. അതിലും വലുതോ തുല്യമോ എക്സ്പ്രഷൻ >= എക്സ്പ്രഷൻ
9. L->R == തുല്യമാണ് എക്സ്പ്രഷൻ == എക്സ്പ്രഷൻ
!= തുല്യമല്ല എക്സ്പ്രഷൻ != എക്സ്പ്രഷൻ
10. L->R & ബിറ്റ്വൈസ് AND എക്സ്പ്രഷൻ & എക്സ്പ്രഷൻ
11. എൽ->ആർ ^ ബിറ്റ്‌വൈസ് എക്‌സ്‌ക്ലൂസീവ് അല്ലെങ്കിൽ (XOR) എക്സ്പ്രഷൻ ^ എക്സ്പ്രഷൻ
12. L->R | ബിറ്റ്വൈസ് അല്ലെങ്കിൽ എക്സ്പ്രഷൻ | ആവിഷ്കാരം
13. എൽ->ആർ && ലോജിക്കൽ കൂടാതെ (AND) എക്സ്പ്രഷൻ && എക്സ്പ്രഷൻ
14. എൽ->ആർ || ലോജിക്കൽ OR പദപ്രയോഗം || ആവിഷ്കാരം
15. R->L ?: ടെർനറി സോപാധിക ഓപ്പറേറ്റർ (ചുവടെയുള്ള കുറിപ്പ് കാണുക) ആവിഷ്കാരം ? എക്സ്പ്രഷൻ: എക്സ്പ്രഷൻ
= അസൈൻമെൻ്റ് മൂല്യം = പദപ്രയോഗം
*= അസൈൻമെൻ്റിനൊപ്പം ഗുണനം lvalue *= എക്സ്പ്രഷൻ
/= അസൈൻമെൻ്റോടുകൂടിയ ഡിവിഷൻ മൂല്യം /= എക്സ്പ്രഷൻ
%= അസൈൻമെൻ്റിനൊപ്പം ബാക്കിയുള്ള വിഭജനം lvalue %= എക്സ്പ്രഷൻ
+= അസൈൻമെൻ്റിനൊപ്പം കൂട്ടിച്ചേർക്കൽ lvalue += എക്സ്പ്രഷൻ
-= അസൈൻമെൻ്റിനൊപ്പം കുറയ്ക്കൽ lvalue -= എക്സ്പ്രഷൻ
<<= ബിറ്റ്വൈസ് ഇടത് ഷിഫ്റ്റ് അസൈൻമെൻ്റ് മൂല്യം<<= expression
>>= ബിറ്റ്വൈസ് റൈറ്റ് ഷിഫ്റ്റ് അസൈൻമെൻ്റ് മൂല്യം >>= എക്സ്പ്രഷൻ
&= ബിറ്റ്‌വൈസ് ആൻഡ് ഓപ്പറേഷൻ ഉള്ള അസൈൻമെൻ്റ് മൂല്യം &= എക്സ്പ്രഷൻ
|= ബിറ്റ്‌വൈസ് അല്ലെങ്കിൽ ഓപ്പറേഷൻ ഉള്ള അസൈൻമെൻ്റ് മൂല്യം |= എക്സ്പ്രഷൻ
^= ബിറ്റ്‌വൈസ് എക്‌സ്‌ക്ലൂസീവ് OR (XOR) പ്രവർത്തനത്തോടുകൂടിയ അസൈൻമെൻ്റ് മൂല്യം ^= എക്സ്പ്രഷൻ
16. R->L എറിയുക സ്വമേധയാ ഒരു ഒഴിവാക്കൽ സൃഷ്ടിക്കുന്നു എക്സ്പ്രഷൻ എറിയുക
17. എൽ->ആർ , കോമ ഓപ്പറേറ്റർ (കോമ) ആവിഷ്കാരം, ആവിഷ്കാരം

കുറിപ്പ്: ഒരു സോപാധിക പ്രസ്താവനയുടെ നടുവിലുള്ള ഒരു പദപ്രയോഗം?: അത് പരാൻതീസിസിൽ ഉള്ളതുപോലെ നടപ്പിലാക്കുന്നു.

നിങ്ങൾക്ക് ഇതിനകം അറിയാവുന്ന ചില ഓപ്പറേറ്റർമാർ: +, -, *, /, (), =,<,>, <= и >=. ഗണിതത്തിലും C++ ലും അവയുടെ അർത്ഥം ഒന്നുതന്നെയാണ്.

എന്നിരുന്നാലും, നിങ്ങൾക്ക് മറ്റ് പ്രോഗ്രാമിംഗ് ഭാഷകളിൽ പരിചയമില്ലെങ്കിൽ, ഈ ഓപ്പറേറ്റർമാരിൽ ഭൂരിഭാഗവും ഇപ്പോൾ നിങ്ങൾക്ക് വ്യക്തമാകില്ല. ഇത് കൊള്ളാം. അവയിൽ മിക്കതും ഞങ്ങൾ ഈ അധ്യായത്തിൽ ഉൾപ്പെടുത്തുകയും ബാക്കിയുള്ളവ ആവശ്യാനുസരണം കവർ ചെയ്യുകയും ചെയ്യും.

ഈ പട്ടിക പ്രാഥമികമായി ഉദ്ദേശിച്ചിട്ടുള്ളതാണ്, അതിനാൽ നിങ്ങൾക്ക് എപ്പോൾ വേണമെങ്കിലും അത് പരിഹരിക്കാൻ കഴിയും സാധ്യമായ പ്രശ്നങ്ങൾമുൻഗണന അല്ലെങ്കിൽ സഹവാസം.

C++-ൽ എങ്ങനെ ഒരു ശക്തിയിലേക്ക് ഉയർത്താം?

സാധാരണ ഗണിതത്തിലെ എക്‌സ്‌പോണൻഷ്യേഷനെ പ്രതിനിധീകരിക്കാൻ സാധാരണയായി ഉപയോഗിക്കുന്ന ^ ഓപ്പറേറ്റർ C++ ൽ ഒന്നല്ല എന്നത് നിങ്ങൾ ഇതിനകം ശ്രദ്ധിച്ചിരിക്കണം. C++ ൽ ഇത് ബിറ്റ്‌വൈസ് ആണ് XOR പ്രവർത്തനം. അപ്പോൾ ^ എന്നതിനുപകരം എന്താണ്? പകരം, ഹെഡർ ഫയലിൽ സ്ഥിതി ചെയ്യുന്ന pow() ഫംഗ്ഷൻ :

#ഉൾപ്പെടുന്നു ഇരട്ട x = pow (3.0, 4.0); // 3 മുതൽ 4 ൻ്റെ ശക്തി വരെ

#ഉൾപ്പെടുന്നു

ഇരട്ട x = pow (3.0, 4.0); // 3 മുതൽ 4 ൻ്റെ ശക്തി വരെ

Pow() ഫംഗ്‌ഷൻ്റെ പാരാമീറ്ററുകളും റിട്ടേൺ മൂല്യങ്ങളും ഇരട്ട തരത്തിലാണെന്നത് ശ്രദ്ധിക്കുക. ഫ്ലോട്ടിംഗ്-പോയിൻ്റ് തരങ്ങൾ റൗണ്ടിംഗ് പിശകുകൾക്ക് പേരുകേട്ടതിനാൽ, pow() ൻ്റെ ഫലങ്ങൾ അൽപ്പം കൃത്യതയില്ലാത്തതായിരിക്കാം (അൽപ്പം കുറവോ കുറച്ച് കൂടുതലോ).

നിങ്ങൾക്ക് ഒരു പൂർണ്ണസംഖ്യ ഒരു ശക്തിയിലേക്ക് ഉയർത്തണമെങ്കിൽ, അത് ഉപയോഗിക്കുന്നതാണ് നല്ലത് സ്വന്തം പ്രവർത്തനം, ഉദാഹരണത്തിന്:

// കുറിപ്പ്: എക്‌സ്‌പോണൻ്റ് നെഗറ്റീവ് int pow (int base, int exp) ആയിരിക്കരുത് ( int result = 1; while (exp) ( if (exp & 1) result *= base; exp >>= 1; base *= അടിസ്ഥാനം ;) ഫലം തിരികെ നൽകുക;)

// ശ്രദ്ധിക്കുക: ഘാതം നെഗറ്റീവ് ആയിരിക്കരുത്

int pow (int base, int exp)

int ഫലം = 1 ;

സമയത്ത് (എക്‌സ്‌പി)

എങ്കിൽ (കാലഹരണപ്പെട്ടതും 1)

ഫലം * = അടിസ്ഥാനം ;

എക്സ്പ് >> = 1 ;

അടിസ്ഥാനം * = അടിസ്ഥാനം ;

ഫലം തിരികെ ;

ഇവിടെ ഉപയോഗിച്ചിരിക്കുന്ന അൽഗോരിതം "എക്സ്പോണൻഷ്യേഷൻ ബൈ സ്ക്വയറിംഗ്" ആണ്.

എന്തെങ്കിലും വ്യക്തമല്ലെങ്കിൽ വിഷമിക്കേണ്ട. വാദങ്ങളിലൊന്ന് വളരെ വലുതാണെങ്കിൽ സംഭവിക്കാവുന്ന ഓവർഫ്ലോയുടെ പ്രശ്നത്തെക്കുറിച്ച് അറിഞ്ഞിരിക്കുക.

ടെസ്റ്റ്

1) നിന്ന് സ്കൂൾ മാത്തമാറ്റിക്സ്പരാൻതീസിസിനുള്ളിലെ എക്സ്പ്രഷനുകൾ ആദ്യം എക്സിക്യൂട്ട് ചെയ്യുമെന്ന് നിങ്ങൾക്കറിയാം. ഉദാഹരണത്തിന്, (2 + 3) * 4 ൽ, (2 + 3) ഭാഗം ആദ്യം എക്സിക്യൂട്ട് ചെയ്യും.

ഈ അസൈൻമെൻ്റിൽ 4 എക്സ്പ്രഷനുകൾ ഉണ്ട്, അവയ്ക്ക് പരാൻതീസിസുകളില്ല. മുകളിലുള്ള പട്ടികയിലെ ഓപ്പറേറ്റർ മുൻഗണനയും അസോസിയേറ്റിവിറ്റി നിയമങ്ങളും ഉപയോഗിച്ച്, കംപൈലർ പ്രോസസ്സ് ചെയ്തതുപോലെ ഓരോ എക്സ്പ്രഷനിലേക്കും പരാൻതീസിസുകൾ ചേർക്കുക.

സൂചന: കോളം ഉപയോഗിക്കുക ഉദാഹരണംമുകളിലെ പട്ടികയിൽ ഓപ്പറേറ്റർ അനിയനാണോ (ഒരു ഓപ്പറണ്ടാണോ) അല്ലെങ്കിൽ ബൈനറിയാണോ (രണ്ട് ഓപ്പറണ്ടുകൾ) എന്ന് നിർണ്ണയിക്കാൻ. യൂണറി അല്ലെങ്കിൽ ബൈനറി എന്താണെന്ന് നിങ്ങൾ മറന്നെങ്കിൽ, കാണുക പാഠം 17.

ഉദാഹരണ പരിഹാരം: x = 2 + 3% 4

ബൈനറി ഓപ്പറേറ്റർ% ന് + അല്ലെങ്കിൽ = ഓപ്പറേറ്ററിനേക്കാൾ ഉയർന്ന മുൻഗണനയുണ്ട്, അതിനാൽ ഇത് ആദ്യം പ്രയോഗിക്കുന്നു: x = 2 + (3 % 4);

ബൈനറി ഓപ്പറേറ്റർ + ന് = എന്നതിനേക്കാൾ ഉയർന്ന മുൻഗണനയുണ്ട്, അതിനാൽ ഇത് അടുത്തതായി ഉപയോഗിക്കുന്നു.

ചുമതലകൾ

a) x = 3 + 4 + 5;
b) x = y = z;
c) z *= ++y + 5;
d) a || b && c || ഡി;

ഉത്തരം

എ)മുൻഗണനാ തലം ബൈനറി ഓപ്പറേറ്റർ+ എന്നതിനേക്കാൾ ഉയർന്നത് =:

x = (3 + 4 + 5);

ബൈനറി ഓപ്പറേറ്ററുടെ അസോസിയേറ്റിവിറ്റി + ഇടത്തുനിന്ന് വലത്തോട്ട്:

ഉത്തരം: x = ((3 + 4) + 5).

b)ബൈനറി ഓപ്പറേറ്ററുടെ അസ്സോസിയേറ്റിവിറ്റി = വലത്തുനിന്ന് ഇടത്തേക്ക്:

ഉത്തരം: x = (y = z).

വി) unary operator ++ ന് ഉയർന്ന മുൻഗണനയുണ്ട്:

ബൈനറി + ഓപ്പറേറ്ററിന് രണ്ടാമത്തെ ഉയർന്ന മുൻഗണനയുണ്ട്:

ഉത്തരം: z *= ((++y) + 5).

ജി)ബൈനറി ഓപ്പറേറ്റർ && ന് ||:

ഒരു || (ബി && സി) || ഡി;

ബൈനറി ഓപ്പറേറ്ററുടെ അസോസിയേറ്റിവിറ്റി || ഇടത്തുനിന്ന് വലത്തോട്ട്:

ഉത്തരം: (എ || (ബി && സി)) || ഡി.

ഒരു പദപ്രയോഗത്തിൻ്റെ മൂല്യം കണക്കാക്കുമ്പോൾ പ്രവർത്തനങ്ങളുടെ ക്രമം നിർണ്ണയിക്കപ്പെടുന്നു പ്രവർത്തന ചിഹ്നങ്ങളുടെ ക്രമീകരണം, പരാൻതീസിസ്ഒപ്പം പ്രവർത്തനങ്ങളുടെ മുൻഗണന . ഏറ്റവും ഉയർന്ന മുൻഗണനയുള്ള പ്രവർത്തനങ്ങൾ ആദ്യം നടത്തുന്നു. ഒരു എക്‌സ്‌പ്രഷനിൽ ഒരേ തലത്തിൽ ഒരേ മുൻഗണനയുള്ള നിരവധി പ്രവർത്തനങ്ങൾ അടങ്ങിയിട്ടുണ്ടെങ്കിൽ, അവ എക്‌സിക്യൂഷൻ ക്രമത്തിന് അനുസൃതമായി പ്രോസസ്സ് ചെയ്യുന്നു - വലത്തുനിന്ന് ഇടത്തോട്ടോ ഇടത്തുനിന്ന് വലത്തോട്ടോ. നിങ്ങൾക്ക് ഒരു എക്സ്പ്രഷനിലെ പ്രവർത്തനങ്ങളുടെ ക്രമം മാറ്റണമെങ്കിൽ, നിങ്ങൾ പരാൻതീസിസുകൾ ഉപയോഗിക്കണം, ഉദാഹരണത്തിന് (x + y) * z .

ഒരു മുൻഗണന കോമ പ്രവർത്തനങ്ങൾമറ്റെല്ലാ പ്രവർത്തനങ്ങളേക്കാളും കുറവാണ്.

താഴെപ്പറയുന്ന പട്ടിക C++ ഭാഷാ പ്രവർത്തനങ്ങൾ മുൻഗണനയുടെ അവരോഹണ ക്രമത്തിൽ പട്ടികപ്പെടുത്തുന്നു. വ്യത്യസ്ത മുൻഗണനകളുള്ള പ്രവർത്തനങ്ങൾ ഒരു ലൈൻ കൊണ്ട് വേർതിരിച്ചിരിക്കുന്നു.

പ്രവർത്തന മുൻഗണനാ പട്ടിക

ഓപ്പറേഷൻ അടയാളങ്ങൾ

ഓപ്പറേഷൻ പേരുകൾ

എക്സിക്യൂഷൻ ഓർഡർ

മുൻഗണനാ വർദ്ധനവ്

പോസ്റ്റ്ഫിക്സ് ഇൻക്രിമെൻ്റ്

പോസ്റ്റ്ഫിക്സ് ഡിക്രിമെൻ്റ്

ഇടത്തുനിന്ന് വലത്തോട്ട്

വലിപ്പം

(തരം ) എക്സ്പ്രഷൻ ഒപ്പം

തരം (പ്രകടനം)

ഓപ്പറാൻറ് വലുപ്പം ബൈറ്റുകളിൽ

പ്രിഫിക്സ് ഇൻക്രിമെൻ്റ്

പ്രിഫിക്സ് ഡിക്രിമെൻ്റ്

ബിറ്റ്വൈസ് എൻ

ലോജിക്കൽ അല്ല

ഏകീകൃത മൈനസ്, പ്ലസ്

തരം പരിവർത്തനം

വലതുവശത്ത്ഇടത്തെ

ഗുണനം

പൂർണ്ണസംഖ്യകളുടെ വിഭജനത്തിനു ശേഷമുള്ള ശേഷിപ്പ്

ഇടത്തുനിന്ന് വലത്തോട്ട്

കൂട്ടിച്ചേർക്കൽ

കുറയ്ക്കൽ

ഇടത്തുനിന്ന് വലത്തോട്ട്

ഇടത്തേക്ക് മാറുക

വലത്തേക്ക് മാറുക

ഇടത്തുനിന്ന് വലത്തോട്ട്

കുറവ് അല്ലെങ്കിൽ തുല്യം

കൂടുതലോ തുല്യമോ

ഇടത്തുനിന്ന് വലത്തോട്ട്

ഇടത്തുനിന്ന് വലത്തോട്ട്

ബിറ്റ്വൈസ് ഒപ്പം

ഇടത്തുനിന്ന് വലത്തോട്ട്

ബിറ്റ്വൈസ് എക്സ്ക്ലൂസീവ് അഥവാ

ഇടത്തുനിന്ന് വലത്തോട്ട്

ബിറ്റ്വൈസ് അഥവാ

ഇടത്തുനിന്ന് വലത്തോട്ട്

ലോജിക്കൽ ഒപ്പം

ഇടത്തുനിന്ന് വലത്തോട്ട്

ലോജിക്കൽ അഥവാ

ഇടത്തുനിന്ന് വലത്തോട്ട്

? :

സോപാധിക

വലതുവശത്ത്ഇടത്തെ

*= , /= , %=

+= , - =

<<= , >>=

&= , |= , ^=

അസൈൻമെൻ്റ് (ലളിതവും

സംയുക്തം)

വലതുവശത്ത്ഇടത്തെ

കോമ പ്രവർത്തനം

ഇടത്തുനിന്ന് വലത്തോട്ട്

കാസ്റ്റിംഗ് ടൈപ്പ് ചെയ്യുക

പ്രോഗ്രാമിംഗ് ഭാഷ C++, ടൈപ്പ് ചെയ്‌ത ഭാഷയായതിനാൽ, വ്യത്യസ്ത ഡാറ്റാ തരങ്ങളിൽ പ്രവർത്തിക്കുന്ന എക്‌സ്‌പ്രഷനുകൾ വളരെ സ്വതന്ത്രമായി കൈകാര്യം ചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഈ സാഹചര്യത്തിൽ, പദപ്രയോഗത്തിൻ്റെ ഓപ്പറണ്ടുകൾ ചില പൊതുവായ തരത്തിലേക്ക് കാസ്‌റ്റ് ചെയ്യുന്നു.

ചെറിയ ശ്രേണിയിലുള്ള മൂല്യങ്ങളുള്ള ഓപ്പറണ്ടുകളെ വലിയ ശ്രേണിയിലുള്ള മൂല്യങ്ങളുള്ള ഓപ്പറണ്ടുകളിലേക്ക് പരിവർത്തനം ചെയ്യുന്ന പരിവർത്തനങ്ങൾ മാത്രമേ സ്വയമേവ നടപ്പിലാക്കുകയുള്ളൂ, കാരണം ഇത് വിവരങ്ങൾ നഷ്ടപ്പെടാതെ സംഭവിക്കുന്നു. ഉദാഹരണത്തിന്, എക്സ്പ്രഷനിലാണെങ്കിൽ ഇവൽ + എഫ്വിഅൽവേരിയബിൾ ഇവൾ തരം int , ഒപ്പം വേരിയബിളും എഫ്വിഅൽ- തരം ഫ്ലോട്ട് , പിന്നെ എക്സിക്യൂട്ട് ചെയ്യുമ്പോൾ പ്രവർത്തനങ്ങൾ(+ ) വേരിയബിൾ മൂല്യം ivഅൽടൈപ്പ് ചെയ്യാൻ കാസ്റ്റ് ചെയ്യും ഫ്ലോട്ട് .

ദൈർഘ്യമേറിയ പൂർണ്ണസംഖ്യകൾ ചെറുതോ യഥാർത്ഥമോ ആയ പൂർണ്ണസംഖ്യകളിലേക്ക് നൽകുമ്പോൾ പോലുള്ള വിവരങ്ങൾ നഷ്‌ടപ്പെടാനിടയുള്ള പദപ്രയോഗങ്ങൾ മുന്നറിയിപ്പുകൾ ഉയർത്തിയേക്കാം, എന്നാൽ അവ സാധുവാണ് (അസൈൻമെൻ്റ് ഓപ്പറേറ്റർ കാണുക).

ഏത് എക്‌സ്‌പ്രഷനും, ഒരു യുണറി ഓപ്പറേറ്റർ ഉപയോഗിച്ച് അതിൻ്റെ തരത്തിൻ്റെ പരിവർത്തനം നിങ്ങൾക്ക് വ്യക്തമായി വ്യക്തമാക്കാൻ കഴിയും കൊണ്ടുവരുന്നു (പരിവർത്തനം വഴി) തരം . പ്രവർത്തനം രണ്ട് ഫോർമാറ്റുകളിൽ എഴുതാം:

(തരം) എക്സ്പ്രഷൻ

തരം(പ്രകടനം)

ഓപ്പറാൻറ് പ്രവർത്തനങ്ങൾതരം കാസ്റ്റുകൾപരിവർത്തനം ചെയ്യേണ്ട പദപ്രയോഗമാണ്. ഒരു മുൻഗണന തരം കാസ്റ്റ് പ്രവർത്തനങ്ങൾമറ്റ് ഏകീകൃത പ്രവർത്തനങ്ങൾ പോലെ തന്നെ. ഉദാഹരണത്തിന്: (നീളമുള്ളഇരട്ടി) 5; (int) എഫ് ; (ഇരട്ട) a/2 .

സംശയാസ്‌പദമായ പദപ്രയോഗത്തിന് വളരെ സങ്കീർണ്ണമായ ഒരു രൂപമുണ്ടെങ്കിൽ, അതിൻ്റെ ഭാഗം മാത്രമല്ല, മുഴുവൻ പദപ്രയോഗത്തിൻ്റെയും ഫലത്തിൻ്റെ തരം മാറുമെന്ന് ഉറപ്പാക്കാൻ അത് പരാൻതീസിസിൽ ഇടുന്നത് നല്ലതാണ്. ഉദാഹരണത്തിന്,

(int) x + b * c

(int) (x + b * c )

ആദ്യ സന്ദർഭത്തിൽ, പരിവർത്തനം വേരിയബിളുമായി ബന്ധപ്പെട്ടതാണ് x , രണ്ടാമത്തേതിൽ - മുഴുവൻ എക്സ്പ്രഷനിലേക്കും x+b*c.

മുൻഗണനയും നിർവ്വഹണ ക്രമവും

സി ഓപ്പറേറ്റർമാരുടെ മുൻഗണനയും അസോസിയേറ്റിവിറ്റിയും ഒരു എക്സ്പ്രഷനിൽ ഓപ്പറണ്ടുകളെ ഗ്രൂപ്പുചെയ്യുകയും പ്രവർത്തനങ്ങൾ വിലയിരുത്തുകയും ചെയ്യുന്ന ക്രമത്തെ സ്വാധീനിക്കുന്നു. വ്യത്യസ്ത മുൻഗണനകളുള്ള നിരവധി പ്രവർത്തനങ്ങൾ ഉള്ളപ്പോൾ മാത്രമാണ് പ്രവർത്തനങ്ങളുടെ മുൻഗണന പ്രസക്തമാകുന്നത്. ഉയർന്ന മുൻഗണനയുള്ള ഓപ്പറേറ്റർമാരുള്ള എക്സ്പ്രഷനുകൾ ആദ്യം വിലയിരുത്തപ്പെടുന്നു.

പട്ടിക 4.1 മുൻഗണനയുടെ അവരോഹണ ക്രമത്തിൽ പ്രവർത്തനങ്ങൾ ലിസ്റ്റ് ചെയ്യുന്നു. ഒരേ ടേബിൾ വരിയിൽ സ്ഥിതി ചെയ്യുന്ന അല്ലെങ്കിൽ ഒരു ഗ്രൂപ്പായി സംയോജിപ്പിച്ചിരിക്കുന്ന പ്രവർത്തനങ്ങൾക്ക് ഒരേ മുൻഗണനയും ഒരേ അസോസിയേറ്റിവിറ്റിയും ഉണ്ട്.

പട്ടിക 4.1.

സി ഭാഷയിലെ പ്രവർത്തനങ്ങളുടെ മുൻഗണനയും അസോസിയേറ്റിവിറ്റിയും

പ്രവർത്തന ചിഹ്നം പേര് സഹവാസം
() . -> പ്രാഥമികം ഇടത്തുനിന്ന് വലത്തോട്ട്
+ - ~ ! * & ++ -- തരം കാസ്റ്റ് വലുപ്പം യുണറി വലത്തുനിന്ന് ഇടത്തോട്ട്
* / % ഗുണിതം ഇടത്തുനിന്ന് വലത്തോട്ട്
+ - കൂട്ടിച്ചേർക്കൽ ഇടത്തുനിന്ന് വലത്തോട്ട്
>> << ഷിഫ്റ്റ് ഇടത്തുനിന്ന് വലത്തോട്ട്
< > <= >= മനോഭാവം ഇടത്തുനിന്ന് വലത്തോട്ട്
== != മനോഭാവം ഇടത്തുനിന്ന് വലത്തോട്ട്
& ബിറ്റ്വൈസ് AND ഇടത്തുനിന്ന് വലത്തോട്ട്
^ ബിറ്റ്‌വൈസ് എക്‌സ്‌ക്ലൂസീവ് അല്ലെങ്കിൽ ഇടത്തുനിന്ന് വലത്തോട്ട്
| ബിറ്റ്വൈസ് ഇൻക്ലൂസീവ് അല്ലെങ്കിൽ ഇടത്തുനിന്ന് വലത്തോട്ട്
&& ലോജിക്കൽ AND ഇടത്തുനിന്ന് വലത്തോട്ട്
|| ലോജിക്കൽ OR ഇടത്തുനിന്ന് വലത്തോട്ട്
?: സോപാധികം വലത്തുനിന്ന് ഇടത്തോട്ട്
= *= /= %= += -= <<= >>= &= |= ^= ലളിതവും സംയുക്തവുമായ നിയമനം വലത്തുനിന്ന് ഇടത്തോട്ട്
, തുടർച്ചയായ കണക്കുകൂട്ടൽ ഇടത്തുനിന്ന് വലത്തോട്ട്

പട്ടിക 4.1 ൽ നിന്ന്. ഫംഗ്‌ഷൻ കോൾ, ഇൻഡക്‌സ് എക്‌സ്‌പ്രഷൻ, എലമെൻ്റ് സെലക്ഷൻ എക്‌സ്‌പ്രഷൻ, പാരന്തറ്റിക്കൽ എക്‌സ്‌പ്രഷൻ എന്നിവയെ പ്രതിനിധീകരിക്കുന്ന ഓപ്പറണ്ടുകൾക്ക് ഏറ്റവും ഉയർന്ന മുൻഗണനയും ഇടത്തുനിന്ന് വലത്തോട്ട് അസോസിയേറ്റിവിറ്റിയും ഉണ്ടെന്ന് ഇത് പിന്തുടരുന്നു. ടൈപ്പ് കാസ്റ്റിംഗിന് ഏകീകൃത ഓപ്പറേറ്റർമാരുടെ അതേ മുൻഗണനയും നിർവ്വഹണ ക്രമവും ഉണ്ട്.

ഒരു എക്സ്പ്രഷനിൽ ഒരേ മുൻഗണനയുള്ള നിരവധി പ്രവർത്തനങ്ങൾ അടങ്ങിയിരിക്കാം. ഒരേ മുൻഗണനാ തലത്തിലുള്ള ഒന്നിലധികം ഓപ്പറേറ്റർമാർ ഒരു എക്‌സ്‌പ്രഷനിൽ ദൃശ്യമാകുമ്പോൾ, അവ അവരുടെ അസ്സോസിയേറ്റിവിറ്റി അനുസരിച്ച് പ്രയോഗിക്കുന്നു - ഒന്നുകിൽ വലത്തുനിന്ന് ഇടത്തോട്ടോ ഇടത്തുനിന്ന് വലത്തോട്ടോ.

ചില പ്രവർത്തനങ്ങൾക്ക്, പ്രത്യേകിച്ച് ഷിഫ്റ്റ്, ബിറ്റ്വൈസ് പ്രവർത്തനങ്ങൾക്ക് സി ഭാഷ ഒരു നിർഭാഗ്യകരമായ മുൻഗണന ക്രമം സ്വീകരിക്കുന്നു എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്. ഗണിത പ്രവർത്തനങ്ങളേക്കാൾ (കൂടാതെ, മുതലായവ) അവർക്ക് കുറഞ്ഞ മുൻഗണനയുണ്ട്. അതുകൊണ്ട് ആവിഷ്കാരം

a = b & 0xFF + 5

ആയി കണക്കാക്കുന്നു

a = b & (0xFF + 5),

പ്രയോഗവും

a +c >> 1

ആയി കണക്കാക്കുന്നു

(a + c) >> 1

ഗുണിതവും അഡിറ്റീവും ബിറ്റ്‌വൈസ് പ്രവർത്തനങ്ങളും കമ്മ്യൂട്ടാറ്റിവിറ്റിയുടെ സ്വത്താണ്. ഒരേ മുൻഗണനയുള്ള നിരവധി കമ്മ്യൂട്ടേറ്റീവ് പ്രവർത്തനങ്ങൾ ഉൾപ്പെടുന്ന ഒരു എക്‌സ്‌പ്രഷൻ വിലയിരുത്തുന്നതിൻ്റെ ഫലം ഈ പ്രവർത്തനങ്ങൾ നടത്തുന്ന ക്രമത്തെ ആശ്രയിക്കുന്നില്ല എന്നാണ് ഇതിനർത്ഥം. അതിനാൽ, മൂല്യനിർണ്ണയ ക്രമം വ്യക്തമാക്കുന്ന പദപ്രയോഗത്തിൽ പരാൻതീസിസുകൾ അടങ്ങിയിട്ടുണ്ടെങ്കിലും, അത്തരം പദപ്രയോഗങ്ങളെ ഏത് ക്രമത്തിലും വിലയിരുത്താനുള്ള അവകാശം കംപൈലറിൽ നിക്ഷിപ്തമാണ്.

SP TS unary plus ഓപ്പറേഷൻ നടപ്പിലാക്കുന്നു, ഇത് പരാൻതീസിസിലെ എക്സ്പ്രഷനുകളുടെ കണക്കുകൂട്ടൽ ക്രമം ഉറപ്പ് നൽകാൻ നിങ്ങളെ അനുവദിക്കുന്നു.

സീക്വൻഷ്യൽ മൂല്യനിർണ്ണയ പ്രവർത്തനം, ലോജിക്കൽ AND കൂടാതെ OR പ്രവർത്തനങ്ങൾ, സോപാധിക പ്രവർത്തനം, ഫംഗ്ഷൻ കോൾ പ്രവർത്തനം എന്നിവ അവയുടെ പ്രവർത്തനങ്ങളെ വിലയിരുത്തുന്ന ഒരു പ്രത്യേക ക്രമം ഉറപ്പ് നൽകുന്നു. ഒരു സീക്വൻഷ്യൽ മൂല്യനിർണ്ണയ പ്രവർത്തനം അതിൻ്റെ ഓപ്പറണ്ടുകൾ ഇടത്തുനിന്ന് വലത്തോട്ട് മൂല്യനിർണ്ണയം നടത്തുന്നുവെന്ന് ഉറപ്പാക്കുന്നു (ഒരു ഫംഗ്‌ഷൻ കോളിലെ ആർഗ്യുമെൻ്റുകളെ കോമ വേർതിരിക്കുന്നത് ഒരു തുടർച്ചയായ മൂല്യനിർണ്ണയ പ്രവർത്തനമല്ല, മാത്രമല്ല അത്തരം ഗ്യാരണ്ടികൾ നൽകുന്നില്ല). ഫംഗ്ഷൻ വിളിക്കപ്പെടുമ്പോഴേക്കും എല്ലാ ആർഗ്യുമെൻ്റുകളും ഇതിനകം തന്നെ കണക്കുകൂട്ടിക്കഴിഞ്ഞുവെന്ന് ഉറപ്പുനൽകുന്നു.

ഒരു സോപാധിക പ്രവർത്തനം അതിൻ്റെ ആദ്യ ഓപ്പറണ്ടിനെ ആദ്യം വിലയിരുത്തുന്നു, തുടർന്ന്, അതിൻ്റെ മൂല്യത്തെ ആശ്രയിച്ച്, അതിൻ്റെ രണ്ടാമത്തേതോ മൂന്നാമത്തേതോ.

ലോജിക്കൽ ഓപ്പറേഷനുകളും അവയുടെ പ്രവർത്തനങ്ങളെ ഇടത്തുനിന്ന് വലത്തോട്ട് വിലയിരുത്തുന്നു. എന്നിരുന്നാലും, ഒരു പദപ്രയോഗത്തിൻ്റെ ഫലം നിർണ്ണയിക്കാൻ ആവശ്യമായ ഏറ്റവും കുറഞ്ഞ ഓപ്പറണ്ടുകളുടെ എണ്ണം ലോജിക്കൽ പ്രവർത്തനങ്ങൾ വിലയിരുത്തുന്നു. അതിനാൽ, പദപ്രയോഗത്തിൻ്റെ രണ്ടാമത്തെ ഓപ്പറണ്ടിനെ വിലയിരുത്താൻ കഴിയില്ല.

int x, y, z, f();

z = x > y || f(x, y);

ആദ്യം, x>y എന്ന പദപ്രയോഗം കണക്കാക്കുന്നു. ഇത് ശരിയാണെങ്കിൽ, z എന്ന വേരിയബിളിന് മൂല്യം 1 നൽകുന്നു, കൂടാതെ f ഫംഗ്‌ഷൻ വിളിക്കപ്പെടുന്നില്ല. x ൻ്റെ മൂല്യം y-നേക്കാൾ വലുതല്ലെങ്കിൽ, f(x,y) എന്ന പദപ്രയോഗം കണക്കാക്കുന്നു. ഫംഗ്ഷൻ പൂജ്യമല്ലാത്ത ഒരു മൂല്യം നൽകുന്നുവെങ്കിൽ, വേരിയബിൾ z ന് 1 അസൈൻ ചെയ്യപ്പെടും, അല്ലാത്തപക്ഷം 0. ഫംഗ്‌ഷനെ വിളിക്കുമ്പോൾ, അതിൻ്റെ ആദ്യ ആർഗ്യുമെൻ്റിൻ്റെ മൂല്യം രണ്ടാമത്തേതിനേക്കാൾ വലുതാണെന്ന് ഉറപ്പുനൽകുന്നു.

പരിഗണിക്കപ്പെട്ട ഉദാഹരണം ലോജിക്കൽ പ്രവർത്തനങ്ങളുടെ നിർവ്വഹണ ക്രമം ഉപയോഗിക്കുന്നതിനുള്ള പ്രധാന സാധ്യതകൾ കാണിക്കുന്നു. ഇത്, ഒന്നാമതായി, ലോജിക്കൽ പ്രവർത്തനങ്ങളുടെ ആദ്യ ഓപ്പറണ്ടുകളായി ഏറ്റവും സാധ്യതയുള്ള വ്യവസ്ഥകൾ സ്ഥാപിക്കുന്നതിലൂടെ കാര്യക്ഷമതയിലെ വർദ്ധനവാണ്. രണ്ടാമതായി, ഒരു എക്സ്പ്രഷനിലേക്ക് ചെക്കുകൾ ചേർക്കുന്നത് സാധ്യമാണ്, അവ തെറ്റാണെങ്കിൽ, തുടർന്നുള്ള പ്രവർത്തനങ്ങൾ നടക്കില്ല. അതിനാൽ, ഇനിപ്പറയുന്ന സോപാധിക പ്രസ്താവനയിൽ എങ്കിൽഫയലിൻ്റെ അവസാനം ഇതുവരെ എത്തിയിട്ടില്ലെങ്കിൽ മാത്രമേ ഫയലിൽ നിന്ന് അടുത്ത പ്രതീകം വായിക്കുകയുള്ളൂ:

എങ്കിൽ(!feof(pf)) && (c = getc(pf)) ...

ഇവിടെ feof- എൻഡ്-ഓഫ്-ഫയൽ പരിശോധന പ്രവർത്തനം, getc- ഒരു ഫയലിൽ നിന്ന് ഒരു ചിഹ്നം വായിക്കുന്നതിനുള്ള പ്രവർത്തനം (വിഭാഗം 12 കാണുക).

മൂന്നാമതായി, പദപ്രയോഗത്തിൽ നമുക്ക് അത് ഉറപ്പുനൽകാൻ കഴിയും f(x)&&g(y)പ്രവർത്തനം എഫ്ചടങ്ങിന് മുമ്പ് വിളിക്കും ജി. ആവിഷ്കാരത്തിന് f(x)+g(y)ഇത് പറയാനാവില്ല.

ഇനിപ്പറയുന്ന ഉദാഹരണങ്ങൾ വിവിധ എക്സ്പ്രഷനുകൾക്കായി ഓപ്പറണ്ടുകളുടെ ഗ്രൂപ്പിംഗ് കാണിക്കുന്നു.

എക്സ്പ്രഷൻ പ്രവർത്തന ഗ്രൂപ്പിംഗ്
a&b || സി (എ & ബി) || സി
a = b || സി a = (b || c)
q && r || s-- (q && r) || (s--)
p == 0 ? p += 1: p += 2 (p == 0 ? p += 1: p) += 2

ആദ്യ ഉദാഹരണത്തിൽ, ബിറ്റ്‌വൈസ് AND ഓപ്പറേറ്ററിന് (&) -ലോജിക്കൽ അല്ലെങ്കിൽ ഓപ്പറേറ്ററിനേക്കാൾ (||) ഉയർന്ന മുൻഗണനയുണ്ട്, അതിനാൽ എക്സ്പ്രഷൻ a&bലോജിക്കൽ OR ഓപ്പറേഷൻ്റെ ആദ്യ ഓപ്പറണ്ടാണ്.

രണ്ടാമത്തെ ഉദാഹരണത്തിൽ, ലോജിക്കൽ OR ഓപ്പറേറ്ററിന് (||) ലളിതമായ അസൈൻമെൻ്റ് ഓപ്പറേറ്ററേക്കാൾ ഉയർന്ന മുൻഗണനയുണ്ട്, അതിനാൽ എക്സ്പ്രഷൻ ബി||സിഅസൈൻമെൻ്റ് ഓപ്പറേഷൻ്റെ ശരിയായ പ്രവർത്തനരീതി രൂപപ്പെടുത്തുന്നു. (അസൈൻ ചെയ്‌ത മൂല്യം ശ്രദ്ധിക്കുക , പൂജ്യമോ ഒന്നോ ആണ്.)

മൂന്നാമത്തെ ഉദാഹരണം വാക്യഘടനാപരമായി ശരിയായ പദപ്രയോഗം കാണിക്കുന്നു, അത് അപ്രതീക്ഷിത ഫലം പുറപ്പെടുവിക്കും. ലോജിക്കൽ OR ഓപ്പറേറ്റർ (||) എന്നതിനേക്കാൾ ലോജിക്കൽ AND ഓപ്പറേറ്ററിന് (&&) ഉയർന്ന മുൻഗണനയുണ്ട്, അതിനാൽ എഴുതുന്നു q&&rഒരു ഓപ്പറാൻറ് രൂപീകരിക്കുന്നു. ലോജിക്കൽ ഓപ്പറേറ്റർമാർ അവരുടെ ഇടത് ഓപ്പറണ്ടിനെ ആദ്യം വിലയിരുത്തുന്നതിനാൽ, എക്സ്പ്രഷൻ q&&rമുമ്പ് കണക്കാക്കുന്നു s--. എന്നിരുന്നാലും, എങ്കിൽ q&&rപൂജ്യമല്ലാത്ത മൂല്യം നൽകുന്നു, അപ്പോൾ s--കണക്കാക്കില്ല കൂടാതെ എസ്കുറച്ചിട്ടില്ല. സ്ഥാപിക്കുന്നത് കൂടുതൽ വിശ്വസനീയമായിരിക്കും s--എക്സ്പ്രഷൻ അല്ലെങ്കിൽ ഡിക്രിമെൻ്റിൻ്റെ ആദ്യ ഓപ്പറണ്ടിൻ്റെ സ്ഥാനത്ത് എസ്ഒരു പ്രത്യേക പ്രവർത്തനം.

നാലാമത്തെ ഉദാഹരണം ഒരു അസാധുവായ പദപ്രയോഗം കാണിക്കുന്നു, അത് ഒരു സമാഹാര പിശകിന് കാരണമാകും. സമത്വ ഓപ്പറേറ്റർക്ക് (==) ഉയർന്ന മുൻഗണനയുണ്ട്, അതിനാൽ p==0ഒരു ഓപ്പറണ്ടായി ഗ്രൂപ്പുചെയ്‌തു. ത്രിതല പ്രവർത്തനം ?: ഇനിപ്പറയുന്ന മുൻഗണനയുണ്ട്. അതിൻ്റെ ആദ്യ ഓപ്പറണ്ട് എക്സ്പ്രഷൻ ആണ് p==0, രണ്ടാമത്തെ ഓപ്പറാൻറ് എക്സ്പ്രഷൻ ആണ് p+=1. എന്നിരുന്നാലും, ഒരു ത്രിതല പ്രവർത്തനത്തിൻ്റെ അവസാന പ്രവർത്തനം പരിഗണിക്കും പി, പക്ഷേ അല്ല p+=2. ഉള്ളത് മുതൽ ഈ സാഹചര്യത്തിൽഐഡൻ്റിഫയർ പിഓപ്പറേറ്റർ മുൻഗണനയുടെ കാര്യത്തിൽ, ഇത് അസൈൻമെൻ്റിനൊപ്പം കൂട്ടിച്ചേർക്കലിൻ്റെ സംയുക്ത പ്രവർത്തനത്തേക്കാൾ ടെർനറി ഓപ്പറേറ്ററുമായി കൂടുതൽ ബന്ധപ്പെട്ടിരിക്കുന്നു. തൽഫലമായി, ഉണ്ട് വാക്യഘടന പിശക്, കാരണം ഒരു കോമ്പൗണ്ട് അസൈൻമെൻ്റ് ഓപ്പറേഷൻ്റെ ഇടത് ഓപ്പറണ്ട് ഒരു L എക്സ്പ്രഷൻ അല്ല.

ഇത്തരത്തിലുള്ള പിശകുകൾ തടയുന്നതിനും പ്രോഗ്രാം കൂടുതൽ വ്യക്തമാക്കുന്നതിനും, പരാൻതീസിസുകൾ ഉപയോഗിക്കാൻ ശുപാർശ ചെയ്യുന്നു. മുമ്പത്തെ ഉദാഹരണം ഇനിപ്പറയുന്ന രീതിയിൽ ശരിയായി ഫോർമാറ്റ് ചെയ്യാം:

(p == 0) ? (p += 1) : (p += 2)

എംബഡഡ് സിസ്റ്റംസ് സോഫ്റ്റ്‌വെയർ എന്ന പുസ്തകത്തിൽ നിന്ന്. പൊതുവായ ആവശ്യങ്ങള്വികസനത്തിലേക്കും ഡോക്യുമെൻ്റേഷനിലേക്കും രചയിതാവ് റഷ്യയുടെ ഗോസ്‌റ്റാൻഡാർട്ട്

ഡെൽഫി പുസ്തകത്തിൽ നിന്ന്. ഉദാഹരണത്തിലൂടെ പഠിക്കുന്നു രചയിതാവ് Parizhsky സെർജി മിഖൈലോവിച്ച്

പ്രസ്താവനകളുടെ നിർവ്വഹണ ഉത്തരവ് ബി സങ്കീർണ്ണമായ പദപ്രയോഗങ്ങൾഓപ്പറേറ്റർമാർ ഇനിപ്പറയുന്ന ക്രമത്തിൽ നടപ്പിലാക്കുന്നു: 1. ().2. അല്ല.3. *, /, div, mod, and, shl, shr, as.4. +, –, അല്ലെങ്കിൽ, xor.5. =,<>, <, >, <=, >=, ഇൻ,

Windows 2000/XP-നുള്ള Windows Script Host എന്ന പുസ്തകത്തിൽ നിന്ന് രചയിതാവ് പോപോവ് ആൻഡ്രി വ്ലാഡിമിറോവിച്ച്

പട്ടികയിൽ ഓപ്പറേറ്റർമാരുടെ നിർവ്വഹണ ക്രമം. A1.10 JScript ഭാഷാ ഓപ്പറേറ്റർമാരെ മുൻഗണനയുടെ ക്രമത്തിലാണ് ക്രമീകരിച്ചിരിക്കുന്നത്, അതായത്. കോമ്പൗണ്ട് സ്റ്റേറ്റ്‌മെൻ്റുകളിൽ, ഈ പട്ടികയിൽ മുകളിൽ ലിസ്‌റ്റ് ചെയ്‌തിരിക്കുന്നവ ആദ്യം എക്‌സിക്യൂട്ട് ചെയ്യും. ഓപ്പറേറ്റർമാർ പട്ടികയുടെ ഒരു വരിയിൽ സ്ഥിതിചെയ്യുന്നുണ്ടെങ്കിൽ, അവ ഇടതുവശത്ത് നിന്ന് നടപ്പിലാക്കും

UNIX: Process Communication എന്ന പുസ്തകത്തിൽ നിന്ന് രചയിതാവ് സ്റ്റീഫൻസ് വില്യം റിച്ചാർഡ്

9.6 റീഡ്-റൈറ്റ് മുൻഗണന വിഭാഗം 8.4-ൽ റീഡ്-റൈറ്റ് ലോക്കുകൾ നടപ്പിലാക്കുന്നത് എഴുതാൻ കാത്തിരിക്കുന്ന പ്രക്രിയകൾക്ക് മുൻഗണന നൽകി. ഇപ്പോൾ ഞങ്ങൾ വിശദാംശങ്ങൾ പഠിക്കും സാധ്യമായ പരിഹാരം fcntl റെക്കോർഡിംഗ് തടയൽ ഉപയോഗിച്ച് വായനക്കാർക്കും എഴുത്തുകാർക്കുമുള്ള ടാസ്ക്കുകൾ. എങ്ങനെയെന്നറിയാൻ ഞാൻ ആഗ്രഹിക്കുന്നു

TCP/IP ആർക്കിടെക്ചർ, പ്രോട്ടോക്കോളുകൾ, നടപ്പിലാക്കൽ (IP പതിപ്പ് 6, IP സുരക്ഷ എന്നിവ ഉൾപ്പെടെ) എന്ന പുസ്തകത്തിൽ നിന്ന് ഫെയ്ത്ത് സിഡ്നി എം

6.13.4 സേവനത്തിൻ്റെ മുൻഗണനയും തരവും TCP/IP പ്രോട്ടോക്കോൾ സ്യൂട്ടിൻ്റെ യഥാർത്ഥ സ്പോൺസർ യുഎസ് ഡിപ്പാർട്ട്‌മെൻ്റ് ഓഫ് ഡിഫൻസ് ആയിരുന്നു, ഇതിന് ഡാറ്റാഗ്രാം മുൻഗണന പ്രധാനമാണ്. സൈനിക, സർക്കാർ സംഘടനകൾക്ക് പുറത്ത് മുൻഗണനകൾ വളരെ കുറവാണ്. മുൻഗണനയ്ക്കായി

HTML 5, CSS 3, വെബ് 2.0 എന്നീ പുസ്തകങ്ങളിൽ നിന്ന്. ആധുനിക വെബ് സൈറ്റുകളുടെ വികസനം. രചയിതാവ് ഡ്രോണോവ് വ്ലാഡിമിർ

22.6.1 മുൻഗണന മുൻഗണനാ ഫീൽഡ് രണ്ട് ഉദ്ദേശ്യങ്ങൾ നിറവേറ്റുന്നു. ടിസിപി ട്രാഫിക്കിനുള്ള ലോഡ് നിയന്ത്രണത്തിൽ, ഉയർന്ന സംഖ്യകൾ നിയന്ത്രണ പാക്കറ്റുകളോടും സംവേദനാത്മക ട്രാഫിക്കിനോടും യോജിക്കുന്നു, കൂടാതെ കുറഞ്ഞ സംഖ്യകൾ സാധാരണ ഗതാഗതം. ഇനിപ്പറയുന്ന മൂല്യങ്ങൾ നിർവചിച്ചിരിക്കുന്നു: 0 ട്രാഫിക് വ്യക്തമാക്കിയിട്ടില്ല1 ഫില്ലർ

HTML 5, CSS 3, വെബ് 2.0 എന്നീ പുസ്തകങ്ങളിൽ നിന്ന്. ആധുനിക വെബ് സൈറ്റുകളുടെ വികസനം രചയിതാവ് ഡ്രോണോവ് വ്ലാഡിമിർ

QNX/UNIX [അനാട്ടമി ഓഫ് കൺകറൻസി] എന്ന പുസ്തകത്തിൽ നിന്ന് രചയിതാവ് സിലൂറിക് ഒലെഗ് ഇവാനോവിച്ച്

ഓപ്പറേറ്റർ മുൻഗണന ഞങ്ങൾ ഇവിടെ ചർച്ച ചെയ്യുന്ന അവസാന ലക്കം ഓപ്പറേറ്റർ മുൻഗണനയാണ്. നമ്മൾ ഓർക്കുന്നത് പോലെ, ഒരു എക്‌സ്‌പ്രഷനിലെ ഓപ്പറേറ്റർമാരെ എക്‌സിക്യൂട്ട് ചെയ്യുന്ന ക്രമത്തെ മുൻഗണന ബാധിക്കുന്നു. ഇനിപ്പറയുന്ന എക്‌സ്‌പ്രഷൻ ഉണ്ടായിരിക്കട്ടെ: a = b + c - 10; ഈ സാഹചര്യത്തിൽ, ആദ്യം b എന്ന വേരിയബിളിൻ്റെ മൂല്യം ആക്‌സസ് ചെയ്യുക

ഫയർബേർഡ് ഡാറ്റാബേസ് ഡെവലപ്പേഴ്‌സ് ഗൈഡ് എന്ന പുസ്തകത്തിൽ നിന്ന് ബോറി ഹെലൻ എഴുതിയത്

മുൻഗണന ഒരുപക്ഷേ പുനർനിർവചിക്കാനുള്ള ഏറ്റവും സാധാരണമായ കാര്യം സൃഷ്‌ടിച്ച ത്രെഡ് എക്‌സിക്യൂട്ട് ചെയ്യുന്ന മുൻഗണനയാണ്. സ്ഥിരസ്ഥിതി പാരാമീറ്ററുകൾ ഉപയോഗിച്ച് ഒരു ത്രെഡ് ആരംഭിക്കുമ്പോൾ, അതിൻ്റെ മുൻഗണന പാരൻ്റ് ത്രെഡിൻ്റെ മുൻഗണനയിലേക്ക് സജ്ജീകരിച്ചിരിക്കുന്നു. ആരംഭിക്കുമ്പോൾ ശ്രദ്ധിക്കുക

ദി സി ലാംഗ്വേജ് - തുടക്കക്കാർക്കുള്ള ഒരു ഗൈഡ് എന്ന പുസ്തകത്തിൽ നിന്ന് പ്രാത സ്റ്റീവൻ എഴുതിയത്

ഒരു എക്‌സ്‌പ്രഷനിൽ ഓപ്പറേറ്റർമാരെയും അവർ ഉൽപ്പാദിപ്പിക്കുന്ന മൂല്യങ്ങളെയും മൂല്യനിർണ്ണയം ചെയ്യുന്ന ക്രമം ഓപ്പറേറ്റർ മുൻഗണന നിർണ്ണയിക്കുന്നു. ഒരു എക്‌സ്‌പ്രഷനിൽ ഒരേ തരത്തിലുള്ള ഒന്നിലധികം ഓപ്പറേറ്റർമാർ അടങ്ങിയിരിക്കുമ്പോൾ, ഒരു വൈരുദ്ധ്യമില്ലെങ്കിൽ ഓപ്പറേറ്റർമാരെ ഇടത്തുനിന്ന് വലത്തോട്ട് വിലയിരുത്തും.

തുടക്കക്കാർക്കുള്ള C++ പുസ്തകത്തിൽ നിന്ന് ലിപ്മാൻ സ്റ്റാൻലി എഴുതിയത്

പ്രവർത്തനങ്ങളുടെ ക്രമം നമുക്ക് പരിഗണിക്കാം അടുത്ത വരി: വെണ്ണ = 25.0 + 60.0 * n / സ്കെയിൽ; ഈ ഓപ്പറേറ്ററിൽ കൂട്ടിച്ചേർക്കൽ, ഗുണനം, വിഭജന പ്രവർത്തനങ്ങൾ എന്നിവ അടങ്ങിയിരിക്കുന്നു. ആദ്യം ഏത് ഓപ്പറേഷൻ നടത്തും? 60.0 ലേക്ക് 25.0 ചേർക്കുമോ, തുടർന്ന് 85.0 ൻ്റെ ഫലം n കൊണ്ട് ഗുണിച്ചാൽ, ഉൽപ്പന്നം

വികസനം എന്ന പുസ്തകത്തിൽ നിന്ന് ലിനക്സ് കേർണലുകൾ ലവ് റോബർട്ട് എഴുതിയത്

1.2.1. ഇൻസ്ട്രക്ഷൻ എക്സിക്യൂഷൻ ഓർഡർ ഡിഫോൾട്ടായി, പ്രോഗ്രാം നിർദ്ദേശങ്ങൾ ഒന്നിനുപുറകെ ഒന്നായി തുടർച്ചയായി നടപ്പിലാക്കുന്നു. പ്രോഗ്രാമിൽ int main())(readIn();sort();compact();print();return 0;) readIn() നിർദ്ദേശം ആദ്യം നടപ്പിലാക്കും, തുടർന്ന് sort(), compact() കൂടാതെ അവസാനം പ്രിൻ്റ് ().എന്നിരുന്നാലും ഒരു സാഹചര്യം സങ്കൽപ്പിക്കാം

PascalABC.NET ഭാഷയുടെ വിവരണം എന്ന പുസ്തകത്തിൽ നിന്ന് രചയിതാവ് റൂബോർഡ് ടീം

പ്രോസസ്സ് മുൻഗണന ഏറ്റവും വ്യാപകമായി ഉപയോഗിക്കുന്ന ഷെഡ്യൂളിംഗ് അൽഗോരിതം മുൻഗണന അടിസ്ഥാനമാക്കിയുള്ള ഷെഡ്യൂളിംഗ് ആണ്. പ്രക്രിയകൾ അവയുടെ പ്രാധാന്യവും ഉപയോഗത്തിൻ്റെ ആവശ്യകതയും അനുസരിച്ച് ക്രമീകരിക്കുക എന്നതാണ് ആശയം

രചയിതാവിൻ്റെ പുസ്തകത്തിൽ നിന്ന്

തടസ്സങ്ങളും നിർവ്വഹണ ക്രമവും തമ്മിലുള്ള സിൻക്രൊണൈസേഷൻ കൈകാര്യം ചെയ്യേണ്ട സാഹചര്യത്തിൽ വ്യത്യസ്ത പ്രോസസ്സറുകൾഅല്ലെങ്കിൽ വ്യത്യസ്‌ത ഹാർഡ്‌വെയർ ഉപകരണങ്ങൾ, ചിലപ്പോൾ മെമ്മറി റീഡ് (ലോഡ്) അല്ലെങ്കിൽ മെമ്മറി റൈറ്റ് (സംരക്ഷിക്കുക) ഇതേ ക്രമത്തിൽ നടത്തേണ്ട ആവശ്യകതയുണ്ട്

രചയിതാവിൻ്റെ പുസ്തകത്തിൽ നിന്ന്

പ്രോസസർ നടത്തുന്ന പ്രവർത്തനങ്ങളുടെ ക്രമം, "കേർണലിലെ സിൻക്രൊണൈസേഷൻ ടൂളുകൾ" എന്ന അധ്യായം 9-ൽ നിന്ന് തിരിച്ചുവിളിക്കുക, അത് വ്യത്യസ്ത ഹാർഡ്‌വെയർ പ്ലാറ്റ്‌ഫോമുകൾക്കായി, പ്രോസസ്സറുകൾ വ്യത്യസ്ത അളവുകളിലേക്ക്നിർവ്വഹണ ക്രമം മാറ്റുക പ്രോഗ്രാം നിർദ്ദേശങ്ങൾ. ചില പ്രോസസ്സറുകൾക്ക്, എക്സിക്യൂഷൻ ക്രമം

രചയിതാവിൻ്റെ പുസ്തകത്തിൽ നിന്ന്

ഓപ്പറേറ്റർ മുൻഗണന മുൻഗണന ഒരു എക്സ്പ്രഷനിലെ പ്രവർത്തനങ്ങൾ നിർവഹിക്കുന്ന ക്രമം നിർണ്ണയിക്കുന്നു. ഏറ്റവും ഉയർന്ന മുൻഗണനയുള്ള പ്രവർത്തനങ്ങൾ ആദ്യം നടപ്പിലാക്കുന്നു. ഒരേ മുൻഗണനയുള്ള പ്രവർത്തനങ്ങൾ ഇടത്തുനിന്ന് വലത്തോട്ട് നിർവ്വഹിക്കുന്നു. പ്രവർത്തന മുൻഗണനാ പട്ടിക @, അല്ല, ^, +, - (unary), പുതിയത് 1