Айнымалылар жəне өрнектерОперация Қысқаша сипаттамасы
1Операция ішіндегі символдар арасында бос орындар болмауы тиіс.
1-ге арттыру жəне кеміту операциялары (++ жəне --). Инкремент жəне декремент деп те аталатын бұл операциялардың екі түрлі жазылу фор- масы бар – префикстік нұсқада операция операнд алдында жазылады жəне постфикстік нұсқада – операциядан кейін көрсетіледі. Префикстік формада алдымен операнд өзгереді, содан кейін оның мəні өрнекті есептеуге қатысады, ал постфикстік формада өрнекті есептеуге операндтың бастапқы мəні алына- ды да, содан соң операнд өзгертіліп, өрнектің нəтижелік мəні есептеледі. #include 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; Программаның орындалу нəтижесі:
Жалпы инкремент операциясының операнды L-мəн (L-value) деп ата- лады. Мəн енгізуге болатын белгілі бір жады бөлігін адрестейтін кез кел- ген өрнек осылай белгіленеді. Бұл атау меншіктеу операциясынан шыққан, себебі операцияның нəтижесі жадының қай аймағына енгізілетінін оның сол жақ бөлігі (Left) анықтайды. Айнымалы L-мəннің дербес бір түрі болып табылады. Объектінің немесе типтің пайдаланатын жады көлемін анықтайтын sizeof операциясы оның мөлшерін байтпен есептеуге арналған, бұл опера- цияны жазудың екі формасы бар: sizeof өрнек жəне sizeof ( тип ) Мысал (С++ тілі стилінде): #include float x = 1; cout << "sizeof (float):" << sizeof (float); cout << "\nsizeof x:" << sizeof x; cout << "\nsizeof (x + 1.0):" << sizeof (x + 1.0); } return 0; Программа жұмысының нəтижесі:
Соңғы өрнек нəтижесінің 8 байт болып тұрғаны – алдын ала келісім бо- йынша нақты тұрақтылар ені ұзынырақ double типіне келтіріледі, сондықтан x айнымалысы мен өрнектің толық мəнінің типі осы double типіне сəйкес келеді. Жақшалар оның ішіндегі өрнектің мəні басымдығы қосу амалы- нан жоғары болып табылатын типтерді түрлендіру операциясынан бұрын есептелуі үшін қажет. Терістеу операциялары (- , ! жəне ~). Арифметикалық терістеу (унарлық минус -) бүтін немесе нақты типтегі операнд таңбасын қарама-қарсыға ауыс- тырады. Логикалық терістеу (!) операнд мəні ақиқат (нөл емес) болса, нəтиже ретінде 0 мəнін, ал операнд 0-ге тең болса, l мəнін қайтарады. Операнд бүтін немесе нақты типте немесе нұсқауыш типінде болуы да мүмкін. Разрядтар бойынша терістеу (~) көбінесе биттік терістеу деп аталады, ол бүтін типті операндтың екілік кодындағы əрбір разрядты инверсиялайды, яғни кері код- пен (1 → 0, ал 0 → 1) жазып шығады. Бөлу (/) жəне бөлгенде шыққан қалдықты табу (%). Бөлу операция- сы арифметикалық типтегі операндтарға қолданылады. Егер операндтардың екеуі де бүтін типте болса, онда операция нəтижесі төменгі бүтін санға дейін дөңгелектенеді, кері жағдайда оның нəтижесі типі түрлендіру ережелеріне сəйкес анықталады («Өрнектер» бөлімін, 32 б. жəне 3-ші қосымшаны қараңыз). Бөлуден шыққан қалдықты табу операциясы тек бүтін типтегі операндтарға қоданылады. Нəтиженің таңбасы есептеуге қатынасатын операндтарға байла- нысты болады. #include int x = 11, у = 4; float z = 4; printf("Бөлу нəтижелері: %d %f\n", x/y, x/z); printf("Қалдық: %d\n", x%y); } return 0; Программа орындалуының нəтижесі:
Екі мəннің тең екендігін тексеру (==) мен меншіктеу операциясының (=) арасындағы айырмашылыққа назар аударыңыз, меншіктеу опрециясының нəтижесі сол жақ операндқа меншіктелген мəн болып табылады. Разрядтар бойынша орындалатын операциялар (&, |, ^) тек бүтін типтегі операндтарға қолданылады жəне олар тек екілік кодтармен жұмыс істейді. Операцияларды орындау кезінде операндтар əрбір бит бойынша (бірінші операндтың алғашқы биті екінші операндтың алғашқы битімен, бірінші операндтың екінші биті екінші операндтың екінші битімен, т.с.с.) бір- бірімен салыстырылады. Разрядтар бойынша конъюнкция немесе разрядтар бойынша ЖƏНЕ (опе- рация белгісі &) операциясының орындалуы кезінде екі операндтың да сəйкес биттері бірге тең болғанда ғана нəтижелік бит бірге тең болуы тиіс. Разрядтар бойынша дизъюнкция немесе разрядтар бойынша НЕМЕСЕ (операция белгісі |) операциясы кезінде салыстырылатын екі биттің біреуінің немесе екеуінің де мəні бірге тең болса, нəтижелік бит 1-ге тең болады. Разрядтар бойынша аластамалы НЕМЕСЕ (операция белгісі ^) екі биттің тек біреуінің ғана мəні 1-ге тең болғанда нəтижелік бит бірге тең болып келеді. #include cout << "\n 6 & 5 = " << (6 & 5); cout << "\n 6 | 5 = " << (6 | 5); cout << "\n 6 ^ 5 = " << (6 ^ 5); } return 0; Программа жұмысының нəтижесі:
Логикалық операцияның нəтижесі true немесе false болады. Логикалық ЖƏНЕ операциясының нəтижесі оның екі операндының да мəні true бол- са ғана true мəніне ие болады. Ал логикалық НЕМЕСЕ операциясының нəтижесі операндтардың кем дегенде біреуінің мəні true болса, true мəнін қабылдайды. Логикалық операциялар солдан оңға қарай орындалады. Егер операция нəтижесін анықтау үшін бірінші операнд мəні жеткілікті болса, онда екінші операнд есептелмейді. Меншіктеу операциялары (=, +=, -=, *= жəне т.б.). Меншіктеу операция- лары программада аяқталған операторлар ретінде қолданылуы мүмкін. Қарапайым меншіктеу операциясының (=) форматы: операнд_1 = операнд_2 Мұнда бірінші операнд L-мəнді, екіншісі өрнек болуы тиіс. Алды- мен операцияның оң жағында орналасқан өрнек есептеледі, содан кейін оның нəтижесі сол жақ бөлігінде көрсетілген жады аймағына жазылады (мнемоникалық ереже: «меншіктеу – бұл мəліметтерді “сол жақ бөлікке” беру»). Осы жады аймағында бұрын сақталған мəлімет, əрине, жоғалады. #include 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; Программа нəтижесі:
Меншіктеу кезінде өрнек типін L-мəн типіне түрлендіру орындалады, бұл ақпараттың жоғалуына əкеліп соғуы мүмкін. Күрделі меншіктеу операцияларында (+=, *=, /=, т.б) оның оң жақ бөлігінде орналасқан өрнекті есептеу кезінде сол жақ бөліктегі L-мəн де қолданылады. Мысалы, қоса отырып меншіктеуде екінші операндқа біріншісі қосылып, нəтижесі бірінші операндқа жазылады, демек a += b өрнегі a = a + b өрнегінің жинақы түрде қысқаша жазылуы болып табылады. Шартты операция (?:). Бұл операция тернарлы, яғни үш операндтан тұрады. Оның жазылу форматы: операнд_1 ? операнд_2 : операнд_3 Бірінші операнд арифметикалық типте немесе нұсқауыш болуы мүмкін. Ол нөлге эквиваленттілігі тұрғысынан бағаланады (нөлге тең операнд false, нөлге тең емес операнд true ретінде қарастырылады). Егер 1-операндты есеп- теу нəтижесі true болса, онда шартты операцияның нəтижесі екінші операнд мəніне, кері жағдайда үшінші операнд мəніне тең болады. Əрқашан екінші немесе үшінші операнд есептеледі. Олардың типтері əртүрлі болуы мүмкін. Шартты операция if шартты операторының қысқартылған жазылу формасы болып табылады (ол 36 б. көрсетілген). #include int a = 11, b = 4, max; max = (b > a) ? b : a; printf("Үлкен сан: %d", max); } return 0; Программа жұмысының нəтижесі:
Шартты операцияны қолданудың тағы бір мысалы: егер кездейсоқ бүтін шаманың мəні берілген n санынан кем болса, осы кездейсоқ шаманы бірге арттыру керек, кері жағдайда оның мəні бірге тең болуы талап етіледі: i = (i < n) ? i + 1 : 1; Бұл бөлімде қарастырылмаған операциялар кейінірек сипатталады. Өрнектер Жоғарыда айтылып кеткендей, өрнектер операндтардан, операция таңбалары мен жақшалардан тұрады да, белгілі бір типтегі кез келген мəнді есептеу үшін қолданылады. Өз кезегінде, əрбір операнд өрнек немесе оның дербес түрлерінің бірі – тұрақты немесе айнымалы болып табылады. Өрнектер мысалдары:
Операциялар өз приоритеттеріне сəйкес орындалады. Операциялардың орындалу ретін өзгерту үшін жай жақшалар қолданылады. Егер бір өрнекте басымдықтары бірдей бірнеше операция қатар жазылған болса, онда унарлы операциялар, шартты операция жəне меншіктеу операциялары оңнан солға қарай, ал қалғандары солдан оңға қарай орындалады. Мысалы, а = b = с өрнегі a = (b = c) екенін білдіреді, ал a + b + c өрнегі (а + b) + с бо- латынын көрсетеді. Өрнектер құрамындағы ішкі өрнектерді есептеу реттілігі анықталмаған: мысалы, (sin(x + 2) + cos(y + 1)) өрнегінде синус косинустан ерте есептеледі деп, ал х + 2 өрнегі у + 1 өрнегіне қарағанда ерте есептеледі деп айтуға болмайды. Өрнекті есептеу нəтижесі өз мəні жəне типімен сипатталады. Мысалы, егер а жəне b – бүтін типті айнымалылар болып, олар төмендегідей түрде сипатталса:
онда а + 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. Достарыңызбен бөлісу: |
Басты бет рсетілетін қызмет халықаралық қаржы Астана халықаралық қызмет регламенті бекіту туралы туралы ережені орталығы туралы субсидиялау мемлекеттік кеңес туралы ніндегі кеңес орталығын басқару қаржы орталығын қаржы орталығы құрамын бекіту неркәсіптік кешен міндетті құпия болуына ерікті тексерілу мемлекеттік медициналық тексерілу құпия медициналық ерікті анонимді Бастауыш тәлім қатысуға жолдамалар қызметшілері арасындағы академиялық демалыс алушыларға академиялық білім алушыларға ұйымдарында білім туралы хабарландыру конкурс туралы мемлекеттік қызметшілері мемлекеттік әкімшілік органдардың мемлекеттік мемлекеттік органдардың барлық мемлекеттік арналған барлық орналасуға арналған лауазымына орналасуға әкімшілік лауазымына инфекцияның болуына жәрдемдесудің белсенді шараларына қатысуға саласындағы дайындаушы ленген қосылған шегінде бюджетке салығы шегінде есептелген қосылған ұйымдарға есептелген дайындаушы ұйымдарға кешен саласындағы сомасын субсидиялау |