Operatorlar va ifodalar

Operatorlar — bu C dasturlash tilidagi ma'lumotlarga amallarni bajarishga mo‘ljallangan maxsus belgilar yoki so‘zlar. Operatorlar yordamida arifmetik, mantiqiy, taqqoslash, bitwise va boshqa turdagi operatsiyalar bajariladi.

1 Arifmetik Operatorlar

Arifmetik operatorlar — bu sonlar o‘rtasida matematik amallarni bajaradigan operatorlar. C tilida asosiy arifmetik operatorlar quyidagilardir:

  • + (Qo‘shish): Ikkita sonning yig‘indisini hisoblaydi.

  • - (Ayrish): Ikkita sonning ayirmasini hisoblaydi.

  • * (Ko‘paytirish): Ikkita sonni ko‘paytiradi.

  • / (Bo‘lish): Ikkita sonni bo‘ladi. Diqqat! Butun sonlar bilan bo‘lishda qoldiq qism e'tiborga olinmaydi.

  • % (Qoldiqni hisoblash): Butun sonlar bilan bo‘lganda qoldiqni qaytaradi. Masalan, 10 % 3 natijasi 1 bo‘ladi, chunki 10 / 3 natijasida qoldiq 1.

Misol: Arifmetik operatorlar bilan ishlash

#include <stdio.h>

int main() {
    int x = 10, y = 3;
    int yigindi = x + y;  // Qo‘shish
    int ayirma = x - y;   // Ayrish
    int kopaytma = x * y; // Ko‘paytirish
    int bolish = x / y;   // Bo‘lish (butun sonli bo‘lish)
    int qoldiq = x % y;   // Qoldiqni hisoblash

    printf("Yig‘indi: %d\n", yigindi);
    printf("Ayirma: %d\n", ayirma);
    printf("Ko‘paytma: %d\n", kopaytma);
    printf("Bo‘lish: %d\n", bolish);
    printf("Qoldiq: %d\n", qoldiq);

    return 0;
}

Chuqur tushuntirish:

  • Bo‘lish (/) operatori butun sonlar bilan ishlatilganda qoldiqni inkor qiladi. Masalan, 10 / 3 natijasi 3 bo‘ladi, lekin haqiqiy javob 3.33. C tilida butun sonlar bo‘lganda qoldiq o‘chiriladi. Agar o‘nlik sonlarni ishlatishni xohlasangiz, float yoki double turlaridan foydalaning.

  • % operatori faqat butun sonlar bilan ishlaydi. Bu operator bo‘lish natijasidagi qoldiqni topadi. Masalan, 10 % 3 natijasi 1 bo‘ladi.

2 Mantiqiy Operatorlar

Mantiqiy operatorlar — bu mantiqiy ifodalar bilan ishlatiladigan operatorlar bo‘lib, ular natijada true (haqiqat) yoki false (yolg‘on) qiymatlarni qaytaradi. Bu operatorlar asosan shartli operatorlarda (if, while kabi) keng qo‘llaniladi.

  • && (AND operatori): Ikkala shart ham rost bo‘lsa (true) natija true bo‘ladi. Agar bitta shart yolg‘on bo‘lsa (false), natija false.

  • || (OR operatori): Har qanday bitta shart rost bo‘lsa, natija true bo‘ladi. Faqat ikkala shart ham yolg‘on bo‘lsa natija false.

  • ! (NOT operatori): Bir shartning teskari qiymatini qaytaradi. Agar shart rost bo‘lsa, false bo‘ladi va aksincha.

Misol: Mantiqiy operatorlar bilan ishlash

#include <stdio.h>

int main() {
    int x = 5, y = 0;
    
    if (x > 0 && y > 0) {
        printf("Ikkala son ham musbat.\n");
    } else {
        printf("Har ikki son musbat emas.\n");
    }

    if (x > 0 || y > 0) {
        printf("Hech bo'lmaganda bitta son musbat.\n");
    } else {
        printf("Hech bir son musbat emas.\n");
    }

    if (!y) {
        printf("Y soni nolga teng.\n");
    }

    return 0;
}

Chuqur tushuntirish:

  • AND (&&) operatori: Ikkala shartni bir vaqtda tekshiradi. Faqat ikkala shart ham rost bo‘lgandagina natija rost bo‘ladi.

  • OR (||) operatori: Bir shart rost bo‘lsa, natija darhol rost bo‘ladi.

  • NOT (!) operatori: Shartni teskari qiymatga o‘zgartiradi. Agar y 0 bo‘lsa, !y true bo‘ladi, chunki 0 mantiqan false deb hisoblanadi.

3 Taqqoslash Operatorlari

Taqqoslash operatorlari ikki o‘zgaruvchining qiymatlarini solishtiradi va mantiqiy natija qaytaradi (true yoki false). Taqqoslash operatorlari odatda shartli ifodalarda ishlatiladi.

  • == (Tenglik): Ikkita o‘zgaruvchining qiymatlari teng bo‘lsa, natija true bo‘ladi.

  • != (Teng emas): Ikkita o‘zgaruvchi teng bo‘lmasa, natija true.

  • > (Katta): Chap tomondagi o‘zgaruvchi o‘ng tomondagi o‘zgaruvchidan katta bo‘lsa, true.

  • < (Kichik): Chap tomondagi o‘zgaruvchi kichik bo‘lsa, true.

  • >= (Katta yoki teng): Chap o‘zgaruvchi katta yoki teng bo‘lsa, true.

  • <= (Kichik yoki teng): Chap o‘zgaruvchi kichik yoki teng bo‘lsa, true.

Misol: Taqqoslash operatorlari bilan ishlash

#include <stdio.h>

int main() {
    int a = 10, b = 20;

    printf("a teng b ga: %d\n", a == b);   // False (0)
    printf("a katta b dan: %d\n", a > b);  // False (0)
    printf("a kichik b dan: %d\n", a < b); // True (1)
    printf("a katta yoki teng b ga: %d\n", a >= b); // False (0)
    printf("a kichik yoki teng b ga: %d\n", a <= b); // True (1)

    return 0;
}

Chuqur tushuntirish:

  • Tenglik operatori (==): Bu operator bir xil qiymatlar bilan ishlatilganda true qaytaradi. Diqqat! = bu qiymat berish operatori, == esa tenglikni tekshiradi.

  • Teng emas operatori (!=): O‘zgaruvchilar teng bo‘lmasa, natija rost bo‘ladi.

4 Bitwise Operatorlar

Bitwise operatorlar raqamlarning bit darajasidagi manipulyatsiyalarini amalga oshiradi. Har bir raqam ikki lik sanoq sistemasida (0 va 1) ko‘rsatilgan bitlardan iborat bo‘ladi. Bitwise operatorlar bu bitlar bilan ishlaydi.

  • & (Bitwise AND): Har bir bit juftligi uchun AND operatsiyasini bajaradi. Ikkala bit 1 bo‘lgandagina natija 1 bo‘ladi.

  • | (Bitwise OR): Har bir bit juftligi uchun OR operatsiyasini bajaradi. Har qanday bitta bit 1 bo‘lsa, natija 1 bo‘ladi.

  • ^ (Bitwise XOR): Har bir bit juftligi uchun XOR operatsiyasini bajaradi. Bitlar har xil bo‘lsa, natija 1 bo‘ladi.

  • ~ (Bitwise NOT): Har bir bitning qiymatini teskari qiladi (1 ni 0 ga, 0 ni 1 ga o‘zgartiradi).

  • << (Left Shift): Bitlarni chapga siljitadi va bo‘sh joylarga 0 joylashtiradi.

  • >> (Right Shift): Bitlarni o‘ngga siljitadi.

Misol: Bitwise operatorlar bilan ishlash

#include <stdio.h>

int main() {
    int a = 5, b = 3; // 5 = 101, 3 = 011

    printf("a AND b: %d\n", a & b);  // 001 = 1
    printf("a OR b: %d\n", a | b);   // 111 = 7
    printf("a XOR b: %d\n", a ^ b);  // 110 = 6
    printf("NOT a: %d\n", ~a);       // Bitwise NOT (teskari qiymat)
    printf("a left shift 1: %d\n", a << 1);  // 101 -> 1010 = 10
    printf("a right shift 1: %d\n", a >> 1); // 101 -> 10 = 2

    return 0;
}

Chuqur tushuntirish:

  • Bitwise operatorlar asosan tizim darajasidagi dasturlashda qo‘llaniladi. Masalan, apparat bilan ishlashda yoki quyi darajadagi manipulyatsiyalarni bajarishda.

  • Chapga va o‘ngga siljitish operatorlari ma'lumotlarni ko‘paytirish va bo‘lish bilan ishlatiladi. Masalan, chapga siljitish qiymatni ikki marta ko‘paytiradi.

5 Ifodalar va ularning ustuvorligi

Ifodalar bir nechta operatorlar ishtirok etganda ularning bajarilish tartibi operatorlarning ustuvorligi va birinchi bajarilish tartibi (assotsiativlik) orqali boshqariladi.

Ustuvorlik darajasi:

  1. Qavslar (()): Har doim birinchi bajariladi.

  2. Ko‘paytirish (*), bo‘lish (/), qoldiq (%): Qo‘shish va ayrishdan ustun.

  3. Qo‘shish (+), ayrish (-): Ustuvorlik jihatidan pastroq.

Misol: Ustuvorlik va ifodalar

#include <stdio.h>

int main() {
    int x = 5 + 3 * 2;  // Ko‘paytirish birinchi bajariladi, keyin qo‘shish
    int y = (5 + 3) * 2; // Qavslar ustunlikka ega, qo‘shish birinchi bajariladi

    printf("Natija (ustuvorliksiz): %d\n", x);  // Natija: 11
    printf("Natija (ustuvorlik bilan): %d\n", y);  // Natija: 16

    return 0;
}

Chuqur tushuntirish:

  • Qavslar operatorlarni ustunlik jihatidan nazorat qilishga yordam beradi. Kodda matematik ifodalarni aniq qilish uchun qavslar keng ishlatiladi.

  • Ko‘paytirish va bo‘lish operatorlari har doim qo‘shish va ayrishdan ustun turadi, shuning uchun ularni qavslar bilan boshqarish kerak bo‘lishi mumkin.

GCC Bilan Xatolarni Tuzatish

6 Sintaksis va kompilyatsiya xatolarini topish

GCC (GNU Compiler Collection) yordamida kodni kompilyatsiya qilishda ko‘pincha xatolar yoki ogohlantirishlar ko‘rinadi. Xatolar asosan sintaksis xatolari bo‘ladi, ya'ni noto‘g‘ri yozilgan kod qismi. GCC bu xatolarni aniqlab, to‘g‘ri kodni tuzatishga yordam beradi.

Misol: Xato bilan noto‘g‘ri kod

#include <stdio.h>

int main() {
    printf("Salom, dunyo!\n)  // Yopish qavsi yo'q va nuqta-vergul yo'q
    return 0;
}

Agar bu kodni kompilyatsiya qilsak, GCC quyidagicha xatolarni ko‘rsatadi:

hello.c: In function ‘main’:
hello.c:3:1: error: expected ; before ‘return’
    3 |     printf("Salom, dunyo!\n")
      |     ^~~~~~

Bu xatoni tuzatish uchun quyidagilarni qo‘shamiz:

  • printf() funksiyasida qavsni yopish va nuqta-vergulni (;) qo‘shish kerak.

printf("Salom, dunyo!\n");

7 Kompilyatsiya qilish jarayonida xatolarni oldini olish

Kodingizda xatolarni oldini olish uchun GCC ning foydali bayroqlaridan foydalanishingiz mumkin:

  • -Wall: Barcha umumiy ogohlantirishlarni ko‘rsatadi.

  • -Werror: Ogohlantirishlarni xatoga aylantiradi.

gcc -Wall hello.c -o hello

Agar kodda ogohlantirishlar bo‘lsa, bu buyruq sizga xatoliklarni ko‘rsatadi va ulardan qochishga yordam beradi.

Ushbu chuqur qo‘llanma yordamida siz C dasturlash tilidagi operatorlar, ifodalar va GCC orqali xatolarni tuzatish haqida kengroq tushunchaga ega bo‘lasiz. Har bir tushuncha texnik jihatdan batafsil ko‘rib chiqildi va amaliyot uchun misollar bilan to‘ldirildi. Iloji boricha buni yaxshilab o'rganib chiqing bu sizga kelajakda kerak bo'ladi.

Last updated