Айнымалылар жəне өрнектер


Операция Қысқаша сипаттамасы



жүктеу 59,7 Kb.
бет5/5
Дата11.01.2022
өлшемі59,7 Kb.
#32149
түріПрограмма
1   2   3   4   5
3 лекция Айнымалылар жəне өрнектер

Операция

Қысқаша сипаттамасы

Унарлы операциялар

++

1-ге арттыру

--

1-ге кеміту1

sizeof

өлшем (мөлшер, көлем, ен немесе ұзындық)

~

разрядтары бойынша терiстеу

!

логикалық терiстеу

-

арифметикалық терiстеу (унарлық минус)

+

унарлық плюс

&

адресті алу

*

адрессіздендіру (адресті жоғалту)

new

жадыны бөлу

delete

жадыны босату

(type)

типті түрлендіру

Бинарлы жəне тернарлы операциялар

*

көбейту

/

бөлу

%

бөлгендегі қалдықты табу

+

қосу

-

азайту

<<

солға ығыстыру

>>

оңға ығыстыру

<

кіші

<=

кіші немесе тең (үлкен емес)

>

үлкен

>=

үлкен немесе тең (кіші емес)

==

тең

!=

тең емес

&

разрядтары бойынша конъюнкция (ЖƏНЕ)

^

разрядтары бойынша аластайтын НЕМЕСЕ

|

разрядтары бойынша дизъюнкция (НЕМЕСЕ)

&&

логикалық ЖƏНЕ

||

логикалық НЕМЕСЕ

?:

шартты операция (тернарлық)

=

меншіктеу




1Операция ішіндегі символдар арасында бос орындар болмауы тиіс.

Операция

Қысқаша сипаттамасы

*=

/=

көбейтіп барып меншіктеу

бөліп барып меншіктеу



%=

бөлгендегі қалдықты тауып барып меншіктеу

+=

қосып барып меншіктеу

-=

азайтып барып меншіктеу

<<=

солға ығыстырып алып меншіктеу

>>=

оңға ығыстырып алып меншіктеу

&=

меншіктеуі бар разрядтары бойынша ЖƏНЕ

|=

меншіктеуі бар разрядтары бойынша НЕМЕСЕ

^=

меншіктеуі бар разрядтар бойынша аластайтын НЕМЕСЕ

.

тізбектей отырып есептеу

1-ге арттыру жəне кеміту операциялары (++ жəне --). Инкремент жəне декремент деп те аталатын бұл операциялардың екі түрлі жазылу фор- масы бар – префикстік нұсқада операция операнд алдында жазылады жəне постфикстік нұсқада – операциядан кейін көрсетіледі. Префикстік формада алдымен операнд өзгереді, содан кейін оның мəні өрнекті есептеуге қатысады, ал постфикстік формада өрнекті есептеуге операндтың бастапқы мəні алына- ды да, содан соң операнд өзгертіліп, өрнектің нəтижелік мəні есептеледі.

#include int main(){

int x = 3, у = 3;

printf ("Префикстiк өрнектiң мəнi: %d\n", ++x); printf ("Постфикстік өрнектiң мəнi: %d\n", y++); printf ("Қосудан кейiнгі x мəнi: %d\n", x); printf ("Қосудан кейiнгі у мəнi: %d\n", у);

} return 0;

Программаның орындалу нəтижесі:

Префикстiк өрнектiң мəнi: 4 Постфикстік өрнектiң мəнi: 3 Қосудан кейiнгі х мəнi: 4 Қосудан кейiнгі у мəнi: 4

Жалпы инкремент операциясының операнды L-мəн (L-value) деп ата- лады. Мəн енгізуге болатын белгілі бір жады бөлігін адрестейтін кез кел- ген өрнек осылай белгіленеді. Бұл атау меншіктеу операциясынан шыққан, себебі операцияның нəтижесі жадының қай аймағына енгізілетінін оның сол жақ бөлігі (Left) анықтайды. Айнымалы L-мəннің дербес бір түрі болып табылады.


Объектінің немесе типтің пайдаланатын жады көлемін анықтайтын sizeof операциясы оның мөлшерін байтпен есептеуге арналған, бұл опера- цияны жазудың екі формасы бар:

sizeof өрнек жəне

sizeof ( тип )

Мысал (С++ тілі стилінде):



#include int main(){

float x = 1;

cout << "sizeof (float):" << sizeof (float); cout << "\nsizeof x:" << sizeof x;

cout << "\nsizeof (x + 1.0):" << sizeof (x + 1.0);

} return 0;

Программа жұмысының нəтижесі:

sizeof (float): 4

sizeof x: 4

sizeof (x + l.0): 8

Соңғы өрнек нəтижесінің 8 байт болып тұрғаны – алдын ала келісім бо- йынша нақты тұрақтылар ені ұзынырақ double типіне келтіріледі, сондықтан x айнымалысы мен өрнектің толық мəнінің типі осы double типіне сəйкес келеді. Жақшалар оның ішіндегі өрнектің мəні басымдығы қосу амалы- нан жоғары болып табылатын типтерді түрлендіру операциясынан бұрын есептелуі үшін қажет.



Терістеу операциялары (- , ! жəне ~). Арифметикалық терістеу (унарлық минус -) бүтін немесе нақты типтегі операнд таңбасын қарама-қарсыға ауыс- тырады. Логикалық терістеу (!) операнд мəні ақиқат (нөл емес) болса, нəтиже ретінде 0 мəнін, ал операнд 0-ге тең болса, l мəнін қайтарады. Операнд бүтін немесе нақты типте немесе нұсқауыш типінде болуы да мүмкін. Разрядтар бойынша терістеу (~) көбінесе биттік терістеу деп аталады, ол бүтін типті операндтың екілік кодындағы əрбір разрядты инверсиялайды, яғни кері код- пен (1 → 0, ал 0 → 1) жазып шығады.

Бөлу (/) жəне бөлгенде шыққан қалдықты табу (%). Бөлу операция- сы арифметикалық типтегі операндтарға қолданылады. Егер операндтардың екеуі де бүтін типте болса, онда операция нəтижесі төменгі бүтін санға дейін дөңгелектенеді, кері жағдайда оның нəтижесі типі түрлендіру ережелеріне сəйкес анықталады («Өрнектер» бөлімін, 32 б. жəне 3-ші қосымшаны қараңыз). Бөлуден шыққан қалдықты табу операциясы тек бүтін типтегі операндтарға қоданылады. Нəтиженің таңбасы есептеуге қатынасатын операндтарға байла- нысты болады.

#include int main(){

int x = 11, у = 4; float z = 4;

printf("Бөлу нəтижелері: %d %f\n", x/y, x/z);

printf("Қалдық: %d\n", x%y);

} return 0;

Программа орындалуының нəтижесі:

Бөлу нəтижелері: 2 2.750000

Қалдық: 3

Ығыстыру операциялары (<< жəне >>) бүтін типті опернадтарға қолданылады. Олар бірінші операндтың екілік кодын екінші операндта берілген мəнге сəйкес солға немесе оңға ығыстырады. Солға ығыстыру (<<) кезінде босатылған разрядтар нөлмен толтырылады. Ал оңға ығыстыруда (>>) бірінші операнд таңбасыз типте болса, босаған биттер нөлмен, кері жағдайда таңбалық разрядпен толтырылады. Ығыстыру операциялары разрядтардың толып кетуі мен дəлдікті жоғалтуды есепке алмайды.

Қатынас операциялары (<, <=, >, >=, ==, !=) бірінші операндты екінші операндпен салыстырады. Операндтар арифметикалық типте немесе нұсқауыштар түрінде болуы мүмкін. Операция нəтижесі true немесе false болады (кез келген нөлге тең емес мəн true болып есептеледі). Тең жəне тең емес сияқты салыстыру операцияларының басымдықтары басқа салыстыру операцияларына қарағанда төмен болады.


НАЗАР АУДАРЫҢЫЗ

Екі мəннің тең екендігін тексеру (==) мен меншіктеу операциясының (=) арасындағы айырмашылыққа назар аударыңыз, меншіктеу опрециясының нəтижесі сол жақ операндқа меншіктелген мəн болып табылады.





Разрядтар бойынша орындалатын операциялар (&, |, ^) тек бүтін типтегі операндтарға қолданылады жəне олар тек екілік кодтармен жұмыс істейді. Операцияларды орындау кезінде операндтар əрбір бит бойынша (бірінші операндтың алғашқы биті екінші операндтың алғашқы битімен, бірінші операндтың екінші биті екінші операндтың екінші битімен, т.с.с.) бір- бірімен салыстырылады.

Разрядтар бойынша конъюнкция немесе разрядтар бойынша ЖƏНЕ (опе- рация белгісі &) операциясының орындалуы кезінде екі операндтың да сəйкес биттері бірге тең болғанда ғана нəтижелік бит бірге тең болуы тиіс.

Разрядтар бойынша дизъюнкция немесе разрядтар бойынша НЕМЕСЕ (операция белгісі |) операциясы кезінде салыстырылатын екі биттің біреуінің немесе екеуінің де мəні бірге тең болса, нəтижелік бит 1-ге тең болады.

Разрядтар бойынша аластамалы НЕМЕСЕ (операция белгісі ^) екі биттің тек біреуінің ғана мəні 1-ге тең болғанда нəтижелік бит бірге тең болып келеді.

#include int main(){

cout << "\n 6 & 5 = " << (6 & 5);

cout << "\n 6 | 5 = " << (6 | 5);

cout << "\n 6 ^ 5 = " << (6 ^ 5);

} return 0;

Программа жұмысының нəтижесі:

6 & 5 = 4

6 | 5 = 7

6 ^ 5 = 3

Логикалық операциялар (&& жəне ||). ЖƏНЕ (&&) мен НЕМЕ- СЕ (||) логикалық операцияларының операндтары арифметикалық типте нұсқауыштар түрінде болуы мүмкін, оның үстіне əрбір операциядағы опе- рандтар əр түрлі типте болуы мүмкін. Мұнда типтерді түрлендіру орындал- майды, əрбір операндтың нөлге эквиваленттілігі бағаланады (нөлге тең опе- ранд false, нөлге тең емес операнд true ретінде қарастырылады).

Логикалық операцияның нəтижесі true немесе false болады. Логикалық ЖƏНЕ операциясының нəтижесі оның екі операндының да мəні true бол- са ғана true мəніне ие болады. Ал логикалық НЕМЕСЕ операциясының нəтижесі операндтардың кем дегенде біреуінің мəні true болса, true мəнін қабылдайды. Логикалық операциялар солдан оңға қарай орындалады. Егер операция нəтижесін анықтау үшін бірінші операнд мəні жеткілікті болса, онда екінші операнд есептелмейді.



Меншіктеу операциялары (=, +=, -=, *= жəне т.б.). Меншіктеу операция- лары программада аяқталған операторлар ретінде қолданылуы мүмкін.

Қарапайым меншіктеу операциясының (=) форматы:

операнд_1 = операнд_2

Мұнда бірінші операнд L-мəнді, екіншісі өрнек болуы тиіс. Алды- мен операцияның оң жағында орналасқан өрнек есептеледі, содан кейін оның нəтижесі сол жақ бөлігінде көрсетілген жады аймағына жазылады (мнемоникалық ереже: «меншіктеу – бұл мəліметтерді “сол жақ бөлікке” беру»). Осы жады аймағында бұрын сақталған мəлімет, əрине, жоғалады.



#include int main(){

int a = 3, b = 5, c = 7; a = b; b = a; c = c + 1; cout << "a = " << a; cout << "\t b = " << b;

cout << "\t c = " << c;

} return 0;

Программа нəтижесі:

a = 5 b = 5 c = 8


НАЗАР АУДАРЫҢЫЗ

Меншіктеу кезінде өрнек типін L-мəн типіне түрлендіру орындалады, бұл ақпараттың жоғалуына əкеліп соғуы мүмкін.





Күрделі меншіктеу операцияларында (+=, *=, /=, т.б) оның оң жақ бөлігінде орналасқан өрнекті есептеу кезінде сол жақ бөліктегі L-мəн де қолданылады. Мысалы, қоса отырып меншіктеуде екінші операндқа біріншісі қосылып, нəтижесі бірінші операндқа жазылады, демек a += b өрнегі a = a + b өрнегінің жинақы түрде қысқаша жазылуы болып табылады.

Шартты операция (?:). Бұл операция тернарлы, яғни үш операндтан тұрады. Оның жазылу форматы:

операнд_1 ? операнд_2 : операнд_3

Бірінші операнд арифметикалық типте немесе нұсқауыш болуы мүмкін. Ол нөлге эквиваленттілігі тұрғысынан бағаланады (нөлге тең операнд false, нөлге тең емес операнд true ретінде қарастырылады). Егер 1-операндты есеп- теу нəтижесі true болса, онда шартты операцияның нəтижесі екінші операнд мəніне, кері жағдайда үшінші операнд мəніне тең болады. Əрқашан екінші немесе үшінші операнд есептеледі. Олардың типтері əртүрлі болуы мүмкін. Шартты операция if шартты операторының қысқартылған жазылу формасы болып табылады (ол 36 б. көрсетілген).



#include int main(){

int a = 11, b = 4, max; max = (b > a) ? b : a;

printf("Үлкен сан: %d", max);

} return 0;

Программа жұмысының нəтижесі:

Үлкен сан: 11

Шартты операцияны қолданудың тағы бір мысалы: егер кездейсоқ бүтін шаманың мəні берілген n санынан кем болса, осы кездейсоқ шаманы бірге арттыру керек, кері жағдайда оның мəні бірге тең болуы талап етіледі:



i = (i < n) ? i + 1 : 1;

Бұл бөлімде қарастырылмаған операциялар кейінірек сипатталады.

Өрнектер

Жоғарыда айтылып кеткендей, өрнектер операндтардан, операция таңбалары мен жақшалардан тұрады да, белгілі бір типтегі кез келген мəнді есептеу үшін қолданылады. Өз кезегінде, əрбір операнд өрнек немесе оның дербес түрлерінің бірі – тұрақты немесе айнымалы болып табылады.

Өрнектер мысалдары:

(а + 0.12)/6

х && у || !z

(t * sin(x)-1.05e4)/((2 * k + 2) * (2 * k + 3))

Операциялар өз приоритеттеріне сəйкес орындалады. Операциялардың орындалу ретін өзгерту үшін жай жақшалар қолданылады. Егер бір өрнекте басымдықтары бірдей бірнеше операция қатар жазылған болса, онда унарлы операциялар, шартты операция жəне меншіктеу операциялары оңнан солға қарай, ал қалғандары солдан оңға қарай орындалады. Мысалы, а = b = с өрнегі a = (b = c) екенін білдіреді, ал a + b + c өрнегі + b) + с бо- латынын көрсетеді. Өрнектер құрамындағы ішкі өрнектерді есептеу реттілігі анықталмаған: мысалы, (sin(x + 2) + cos(y + 1)) өрнегінде синус косинустан ерте есептеледі деп, ал х + 2 өрнегі у + 1 өрнегіне қарағанда ерте есептеледі деп айтуға болмайды.

Өрнекті есептеу нəтижесі өз мəні жəне типімен сипатталады. Мысалы, егер а жəне b – бүтін типті айнымалылар болып, олар төмендегідей түрде сипатталса:

int a = 2, b = 5;

онда а + b өрнегінің мəні 7 жəне типі int болады, ал а = b өрнегі а айнымалысына орналастырылған шамаға тең (мұнда 5) мəнді жəне осы айнымалның типіне сəйкес келетін типті қабылдайды. Осылайша, С++ тілінде а = b = с түріндегі өрнекте алдымен b = с өрнегі есептеледі, со- дан кейін оның мəні а айнымалысына меншіктелетін оң жақта орналасқан операнд болып саналады.

Өрнек құрамында əртүрлі типтегі операндтар болуы мүмкін. Егер операндтардың типтері бірдей болса, онда операция нəтижесі де сол типте болады. Егер операндтардың типтері əртүрлі болса, онда есептеу алдында белгілі бір ережелер бойынша типтерді түрлендіру атқарылады, яғни ша- малар дəлдігін қамтамасыз ету үшін ендері қысқа типтегі мəндер ендері ұзынырақ типтерге түрлендіріледі.

Түрлендірулер екі түрде орындалады:



  • шамалардың ішкі бейнесін өзгерту (дəлдікті жоғалту арқылы немесе дəлдікті жоғалтпайтын);

  • шамалардың тек ішкі бейнесінің интерпретациялануын өзгерту.

Бірінші түрге, мысалы, бүтін санды нақты санға (дəлдікті жоғалтпайтын) жəне керісінше (мүмкін, дəлдікті жоғалта отырып) түрлендіру, ал екінші түрге

  • таңбалы бүтін санды таңбасыз бүтін санға түрлендіру жатады.

Егер int типі char, signed char, unsigned char, short int жəне unsigned short int типіндегі барлық мəндерді бейнелей алатындай бол- са, онда шамалар бүтін типке, ал кері жағдайда олар unsigned int типіне түрлендіріледі.

Осыдан кейін операндтар солардың ішіндегі ең ені ұзын типке түрлендіріледі де, ол нəтиже типі ретінде қолданылады. Түрлендіру ережелері 3-қосымшада келтірілген.



Программалаушы типтердің түрлендірілуін өзі анықтай алатын айқын түрде де бере алады (бұл туралы «Типтерді түрлендіру» бөлімінде, 249 б. айтылады).

Сонымен, біз программалау тілін құрастыратын конструкциялардың ең төменгі деңгейін егжей-тегжейлі түрде ұзақ қарастырып шықтық, енді олардан маңыздырақ құрылымдарды – алдымен жеке операторлар- ды, сонан соң программаларды құруды бастау керек. Тіпті ең қарапайым программаның өзі де белгілі бір ережелерге сəйкес құрылуы тиіс, сон- да ғана ол сенімді, нəтижелі əрі көрікті болады. Осы ережелерді келесі бөлімде қарастырамыз.
жүктеу 59,7 Kb.

Достарыңызбен бөлісу:
1   2   3   4   5




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау