వేరియబుల్స్, డేటా టైప్స్, కాన్‌స్టాంట్స్ & మెమరీ మోడల్

⚡ Modern C (C99 / C11 / C17 Standards) 🟢 Chapter 02 of 20 📂 Phase 01: బేసిక్స్ & మెమరీ ఆర్కిటెక్చర్ 📅 2026 Academic Edition
📌 Covered in this chapter: RAM మెమరీ స్లాట్లు (Bytes & Bits) · వేరియబుల్ డిక్లరేషన్ & ఐడెంటిఫైయర్స్ · char, int, float, double · sizeof ఆపరేటర్ · Signed vs Unsigned (2's Complement) · ఇంటిజర్ ఓవర్‌ఫ్లో ట్రాప్ · const vs #define · ASCII టేబుల్ సీక్రెట్స్ · క్విజ్ & లైవ్ కంపైలర్ ట్రై-బాక్స్

ఒక పెద్ద గిడ్డంగిని (Warehouse) ఊహించుకోండి. ఆ గిడ్డంగిలో లక్షలాది చిన్న ఖాళీ డబ్బాలు (Boxes) వరుసగా పేర్చబడి ఉన్నాయి. ప్రతి డబ్బాకు ఒక ప్రత్యేకమైన సీరియల్ నంబర్ (అడ్రస్) ఉంటుంది. కొన్ని డబ్బాలు చిన్న వస్తువుల కోసం (ఉదాహరణకు పెన్నులు), కొన్ని పెద్ద వస్తువుల కోసం (ఉదాహరణకు పుస్తకాలు లేదా ల్యాప్‌టాప్‌లు) కేటాయించబడతాయి. ఒక వస్తువును భద్రపరచాలంటే — సరైన సైజు గల డబ్బాను ఎంచుకుని, దానిపై స్పష్టమైన పేరు లేబుల్ అతికించాలి కదా?

కంప్యూటర్ యొక్క RAM (Random Access Memory) కూడా అచ్చం అలాంటి ఒక మహత్తర గిడ్డంగి! మీ కంప్యూటర్‌లో 8GB లేదా 16GB RAM ఉంటే — అందులో బిలియన్ల కొద్దీ 1-బైట్ మెమరీ గదులు ఉంటాయి. ప్రోగ్రామింగ్ ప్రపంచంలో మనం డేటాను (ఒక విద్యార్థి వయస్సు, బ్యాంక్ బ్యాలెన్స్, యూజర్ పేరు) తాత్కాలికంగా దాచుకోవడానికి ఆ మెమరీ గదులకు ఇచ్చే పేర్లనే వేరియబుల్స్ (Variables) అంటారు!

కానీ C లాంగ్వేజ్‌లో పైథాన్ లేదా జావాస్క్రిప్ట్ లాగా "ఏదో ఒక డేటా" దాచుకోలేం; C అనేది స్టాటికల్లీ టైప్డ్ (Statically-Typed) లాంగ్వేజ్! అంటే ఒక వేరియబుల్ మెమరీలో ఎన్ని బైట్లు తీసుకుంటుంది (1 Byte? 4 Bytes? 8 Bytes?), అందులో ఏ రకమైన డేటా నిల్వ ఉంటుంది అనేది కంపైలర్‌కు ముందే స్పష్టంగా చెప్పాలి. ఈ రెండవ అధ్యాయంలో, కంప్యూటర్ హార్డ్‌వేర్ మెమరీ ఆర్కిటెక్చర్, డేటా టైప్స్, sizeof ఆపరేటర్, Signed/Unsigned ఓవర్‌ఫ్లో మరియు const కీవర్డ్ ల యొక్క సమగ్ర అంతర్గత పనితీరును లోతుగా నేర్చుకుందాం!

1ఈ Chapter లో మీరు నేర్చుకునే అంశాలు
  • RAM మెమరీ ఆర్కిటెక్చర్: బిట్స్ (Bits), బైట్లు (Bytes), మరియు హెక్సాడెసిమల్ మెమరీ అడ్రస్‌లు.
  • వేరియబుల్స్ అనాటమీ: డిక్లరేషన్, ఇనిషియలైజేషన్, మరియు సి-స్టాండర్డ్ ఐడెంటిఫైయర్ నియమాలు.
  • ప్రాథమిక డేటా టైప్స్: int, char, float, double — మెమరీ వినియోగం.
  • 32-bit vs 64-bit సిస్టమ్స్: డేటా టైప్స్ పరిమాణాల్లో వ్యత్యాసాలు (ILP32 vs LP64 మోడల్స్).
  • sizeof ఆపరేటర్: రన్‌టైమ్‌లో వేరియబుల్ లేదా డేటా టైప్ సైజును బైట్లలో కొలిచే ఏకైక కంపైలర్ సాధనం.
  • సైన్డ్ vs అన్‌సైన్డ్ (Signed vs Unsigned): 2's Complement మెకానిక్స్, పాజిటివ్/నెగెటివ్ నంబర్ల బైనరీ రిప్రజెంటేషన్.
  • ఇంటిజర్ ఓవర్‌ఫ్లో (Integer Overflow Trap): పరిమితి దాటితే ఏం జరుగుతుంది? రౌండ్-ట్రిప్ బగ్స్.
  • టైప్ మోడిఫైయర్లు: short, long, long long, unsigned.
  • కాన్‌స్టాంట్స్: రీడ్-ఓన్లీ వేరియబుల్స్ కోసం const కీవర్డ్ వర్సెస్ #define మ్యాక్రోలు.
  • ASCII టేబుల్ రహస్యాలు: కంప్యూటర్‌కు అక్షరాలు తెలియవు; అన్నీ నంబర్లే! ('A' == 65).
  • బిగినర్స్ చేసే ఘోరమైన తప్పులు: గార్బేజ్ విలువలు, ఫ్లోట్ ప్రెసిషన్ లాస్.
  • ఇంటరాక్టివ్ క్విజ్: 5 లోతైన ఆలోచింపజేసే ప్రశ్నలు & వివరణలు.
2కంప్యూటర్ RAM మెమరీ ఆర్కిటెక్చర్: బిట్స్, బైట్లు & అడ్రస్‌లు

C ప్రోగ్రామర్‌గా మారడానికి కంప్యూటర్ మెమరీ (RAM) ఎలా పనిచేస్తుందో స్పష్టమైన ఊహాచిత్రం ఉండాలి. కంప్యూటర్ చిప్‌లోని ట్రాన్సిస్టర్లు కేవలం ఆన్ (1) లేదా ఆఫ్ (0) స్టేట్‌లను మాత్రమే గ్రహించగలవు. ఈ ప్రాథమిక యూనిట్‌ను బిట్ (Bit - Binary Digit) అంటారు.

మెమరీ కొలతల సూత్రం (Memory Hierarchy):

  • 1 Bit: కేవలం 0 లేదా 1.
  • 1 Nibble: 4 Bits (ఉదాహరణకు: 1010).
  • 1 Byte: 8 Bits (ఉదాహరణకు: 11110000). కంప్యూటర్ మెమరీలో అడ్రస్ చేయగల అతి చిన్న ప్రాథమిక యూనిట్ బైట్!
  • 1 Kilobyte (KB): 1024 Bytes.
  • 1 Megabyte (MB): 1024 KB.
  • 1 Gigabyte (GB): 1024 MB (సుమారు 107 కోట్ల బైట్లు!).

ప్రతి బైట్‌కు మెమరీలో ఒక ప్రత్యేకమైన సంఖ్య ఉంటుంది — దానినే మెమరీ అడ్రస్ (Memory Address) అంటారు. దీనిని సాధారణంగా హెక్సాడెసిమల్ రూపంలో (ఉదాహరణకు: 0x7ffee4b2) సూచిస్తారు. మనం C లో ఒక వేరియబుల్ క్రియేట్ చేసినప్పుడు, ఆపరేటింగ్ సిస్టమ్ RAM లోని ఒక నిర్దిష్ట అడ్రస్ వద్ద ఆ వేరియబుల్ సైజుకు సరిపడా బైట్లను రిజర్వ్ చేస్తుంది.

3వేరియబుల్ అంటే ఏమిటి? డిక్లరేషన్ & ఐడెంటిఫైయర్ నియమాలు

వేరియబుల్ (Variable): కంప్యూటర్ మెమరీ లొకేషన్‌కు మనం ఇచ్చే అర్థవంతమైన పేరు. ఆ లొకేషన్‌లో ఉన్న విలువ ప్రోగ్రామ్ రన్ అవుతున్న సమయంలో మారవచ్చు (Vary కావచ్చు) కాబట్టి దీనికి "వేరియబుల్" అని పేరు వచ్చింది.

డిక్లరేషన్ వర్సెస్ ఇనిషియలైజేషన్:

1. డిక్లరేషన్ (Declaration): int age; కంపైలర్‌కు "age" అనే పేరుతో 4 బైట్ల మెమరీని రిజర్వ్ చేయమని చెబుతుంది. కానీ ఇందులో ప్రస్తుతానికి ఏ విలువ ఉందో తెలియదు (గార్బేజ్ వేల్యూ ఉంటుంది).
2. ఇనిషియలైజేషన్ (Initialization): int age = 25; మెమరీని రిజర్వ్ చేయడంతో పాటు, అందులో ప్రారంభ విలువగా 25 ని భద్రపరుస్తుంది. డిక్లరేషన్ వెంటనే విలువను కేటాయించడం బెస్ట్ ప్రాక్టీస్!

C ఐడెంటిఫైయర్ నియమాలు (Variable Naming Rules):

  • వేరియబుల్ పేర్లు ఆంగ్ల అక్షరాలు (a-z, A-Z), అంకెలు (0-9), లేదా అండర్‌స్కోర్ (_) తో మాత్రమే ఉండాలి.
  • మొదటి అక్షరం తప్పనిసరిగా అక్షరం లేదా అండర్‌స్కోర్ తో మాత్రమే ప్రారంభం కావాలి; అంకెతో మొదలుకాకూడదు (ఉదా: 1stRank తప్పు; rank1 సరైనది).
  • ఖాళీలు (Spaces) లేదా ప్రత్యేక గుర్తులు ($, @, %, #) పూర్తిగా నిషేధం.
  • C లాంగ్వేజ్‌లోని 32 రిజర్వ్‌డ్ కీవర్డ్లు (ఉదా: int, float, return, while) వేరియబుల్ పేర్లుగా వాడకూడదు.
  • C కేస్-సెన్సిటివ్ కాబట్టి total, Total, మరియు TOTAL మూడు వేర్వేరు వేరియబుల్స్!
4ప్రాథమిక డేటా టైప్స్ (Fundamental Data Types)

C లాంగ్వేజ్‌లో డేటాను భద్రపరచడానికి 4 ప్రాథమిక డేటా టైప్స్ ఉన్నాయి. ప్రతి డేటా టైప్‌కు కంప్యూటర్ మెమరీలో నిర్దిష్ట పరిమాణం మరియు నిర్దిష్ట పరిధి (Range) ఉంటుంది:

డేటా టైప్ కీవర్డ్ సాధారణ సైజు (64-bit) ఫార్మాట్ స్పెసిఫైయర్ విలువ పరిధి (Range) & ఉద్దేశం
క్యారెక్టర్ (Character) char 1 Byte (8 bits) %c -128 నుండి 127 (సింగిల్ క్యారెక్టర్ లేదా చిన్న సంఖ్య)
పూర్ణాంకం (Integer) int 4 Bytes (32 bits) %d లేదా %i -2,147,483,648 నుండి +2,147,483,647 (సుమారు ±214 కోట్లు)
దశాంశ సంఖ్య (Float) float 4 Bytes (32 bits) %f 6 నుండి 7 దశాంశ స్థానాల కచ్చితత్వం (Single Precision)
డబుల్ ప్రెసిషన్ (Double) double 8 Bytes (64 bits) %lf 15 నుండి 17 దశాంశ స్థానాల కచ్చితత్వం (Double Precision)
C — Basic Data Types Demo
#include <stdio.h>

int main(void) {
    // 1. క్యారెక్టర్ వేరియబుల్ (సింగిల్ కోట్స్)
    char grade = 'A';
    
    // 2. పూర్ణాంక వేరియబుల్
    int studentId = 101;
    
    // 3. ఫ్లోటింగ్ పాయింట్ వేరియబుల్ (చివర f పెట్టడం మంచిది)
    float fee = 45000.50f;
    
    // 4. డబుల్ వేరియబుల్ (అధిక కచ్చితత్వం)
    double pi = 3.141592653589793;

    printf("విద్యార్థి ID: %d\n", studentId);
    printf("గ్రేడ్: %c\n", grade);
    printf("ఫీజు: ₹%.2f\n", fee); // %.2f అంటే దశాంశం తర్వాత 2 అంకెలు
    printf("పై (PI) విలువ: %.10lf\n", pi);

    return 0;
}
532-bit vs 64-bit ఆర్కిటెక్చర్లలో మెమరీ వ్యత్యాసాలు

చాలామంది బిగినర్స్ "int ఎల్లప్పుడూ 4 బైట్లేనా? లేదా 2 బైట్లా?" అని గందరగోళానికి గురవుతారు. దీనికి సమాధానం: C ప్రమాణాలు డేటా టైప్స్ యొక్క కచ్చితమైన సైజును ఖరారు చేయలేదు; కేవలం కనీస పరిమితులను మాత్రమే సూచించాయి!

  • C స్టాండర్డ్ నియమం: sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long).
  • 16-bit Turbo C++ లో int కేవలం 2 బైట్లు మాత్రమే ఉండేది (పరిధి: -32,768 నుండి 32,767).
  • ఆధునిక 32-bit మరియు 64-bit ప్రాసెసర్లలో (x86_64 GCC, Clang) int ఎల్లప్పుడూ 4 బైట్లు (32 bits) ఉంటుంది.
  • Linux 64-bit (LP64 మోడల్) లో long 8 బైట్లు ఉంటుంది, కానీ Windows 64-bit (LLP64 మోడల్) లో long కేవలం 4 బైట్లు మాత్రమే ఉంటుంది! అందుకే ప్లాట్‌ఫామ్-ఇండిపెండెంట్ కోడ్ కోసం ఆధునిక C లో <stdint.h> ఉపయోగిస్తాం.
6sizeof ఆపరేటర్: సిస్టమ్ బైట్లను కొలవడానికి ఏకైక సాధనం

మీ కంప్యూటర్‌లో ఏ డేటా టైప్ ఎన్ని బైట్లు ఆక్రమిస్తుందో ఊహించాల్సిన పనిలేదు; C మనకు sizeof అనే ఇన్-బిల్ట్ కంపైల్-టైమ్ ఆపరేటర్‌ను అందించింది. ఇది ఒక ఫంక్షన్ కాదు, ఇది ఒక ఆపరేటర్ (Keyword Operator). దీని రిటర్న్ టైప్ size_t (అన్‌సైన్డ్ పూర్ణాంకం), కాబట్టి దీనిని ప్రింట్ చేయడానికి %zu లేదా %lu ఉపయోగిస్తాం:

C — sizeof Operator Deep Dive
#include <stdio.h>

int main(void) {
    printf("=== మీ మెషీన్‌లో డేటా టైప్స్ పరిమాణాలు (Bytes) ===\n");
    printf("char సైజు       : %zu Byte\n", sizeof(char));
    printf("short సైజు      : %zu Bytes\n", sizeof(short));
    printf("int సైజు        : %zu Bytes\n", sizeof(int));
    printf("long సైజు       : %zu Bytes\n", sizeof(long));
    printf("long long సైజు  : %zu Bytes\n", sizeof(long long));
    printf("float సైజు      : %zu Bytes\n", sizeof(float));
    printf("double సైజు     : %zu Bytes\n", sizeof(double));
    printf("long double సైజు: %zu Bytes\n", sizeof(long double));

    // వేరియబుల్ సైజును కూడా కొలవవచ్చు
    double salary = 75000.85;
    printf("salary వేరియబుల్ ఆక్రమించిన మెమరీ: %zu Bytes\n", sizeof(salary));

    return 0;
}
💡 కంపైల్ టైమ్ మ్యాజిక్: sizeof ఆపరేటర్ రన్‌టైమ్‌లో పనిచేయదు; కంపైలర్ కోడ్‌ను కంపైల్ చేసేటప్పుడే ఆ వేరియబుల్ లేదా టైప్ సైజును లెక్కగట్టి, ఆ స్థానంలో నేరుగా సంఖ్యను (Constant Value) ప్రతిక్షేపిస్తుంది. కాబట్టి sizeof వల్ల ప్రోగ్రామ్ రన్నింగ్ స్పీడ్‌పై 0% ప్రభావం కూడా ఉండదు!
7సైన్డ్ vs అన్‌సైన్డ్ (Signed vs Unsigned) & ఓవర్‌ఫ్లో ట్రాప్

సాధారణంగా ఒక డేటా టైప్‌కు ముందు ఏమీ రాయకపోతే అది డీఫాల్ట్‌గా signed గా పరిగణించబడుతుంది (అంటే పాజిటివ్ మరియు నెగెటివ్ సంఖ్యలు రెండూ పట్టవచ్చు). కానీ కొన్ని సందర్భాలలో (ఉదా: వయస్సు, రోల్ నంబర్, మెమరీ సైజు, అరే సైజు) నెగెటివ్ విలువలు ఎప్పటికీ రావు. అప్పుడు unsigned కీవర్డ్ వాడటం వల్ల పాజిటివ్ రేంజ్ రెట్టింపు అవుతుంది!

టైప్ బిట్స్ / బైట్లు కనిష్ట విలువ (Min) గరిష్ట విలువ (Max) ఫార్మాట్ స్పెసిఫైయర్
signed char 8 bits (1 Byte) -128 +127 %d
unsigned char 8 bits (1 Byte) 0 +255 %u
signed int 32 bits (4 Bytes) -2,147,483,648 +2,147,483,647 %d
unsigned int 32 bits (4 Bytes) 0 +4,294,967,295 (సుమారు 429 కోట్లు) %u

⚠️ ఇంటిజర్ ఓవర్‌ఫ్లో రహస్యం (Integer Overflow Trap):

ఒక గడియారంలో ముల్లు 12 దాటితే మళ్ళీ 1 కి ఎలా వస్తుందో — కంప్యూటర్ మెమరీలో కూడా ఒక వేరియబుల్ గరిష్ట పరిమితిని దాటితే (Overflow అయితే) అది చక్రంలా తిరిగి కనిష్ట విలువకు వెళ్ళిపోతుంది! దీనిని Modulo Arithmetic (2's Complement Overflow) అంటారు:

C — Integer Overflow Demonstration
#include <stdio.h>

int main(void) {
    // 1. Signed Char గరిష్ట పరిమితి 127
    signed char num1 = 127;
    printf("ప్రస్తుత విలువ: %d\n", num1);
    
    // 127 కి +1 కలిపితే ఏమవుతుంది? 128 అవ్వదు! -128 అవుతుంది!
    num1 = num1 + 1;
    printf("127 + 1 ఓవర్‌ఫ్లో తర్వాత విలువ: %d (Shocking!)\n\n", num1);

    // 2. Unsigned Char గరిష్ట పరిమితి 255
    unsigned char num2 = 255;
    printf("Unsigned ప్రస్తుత విలువ: %u\n", num2);
    
    // 255 కి +1 కలిపితే 0 అవుతుంది!
    num2 = num2 + 1;
    printf("255 + 1 ఓవర్‌ఫ్లో తర్వాత విలువ: %u\n", num2);

    return 0;
}
🚨 రియల్ వరల్డ్ సెక్యూరిటీ బగ్: 2014 లో యూట్యూబ్‌లో ప్రసిద్ధ "Gangnam Style" పాట వ్యూస్ 214 కోట్లు (2,147,483,647) దాటగానే కౌంటర్ నెగెటివ్ నంబర్ చూపించింది! దానికి కారణం Google ఇంజనీర్లు మొదట 32-bit signed int వాడడమే. వెంటనే దాన్ని 64-bit long long గా మార్చారు.
8టైప్ మోడిఫైయర్లు: short, long, long long

మన డేటా అవసరాన్ని బట్టి మెమరీని ఆదా చేయడానికి లేదా భారీ సంఖ్యలను భద్రపరచడానికి C లో 4 ప్రాథమిక మోడిఫైయర్లు (Modifiers) ఉన్నాయి:

  • short int (లేదా కేవలం short): 2 బైట్లు. చిన్న సంఖ్యల కోసం (-32,768 నుండి 32,767). మెమరీ అత్యంత పరిమితంగా ఉండే మైక్రోకంట్రోలర్లలో వాడతారు.
  • long int (లేదా కేవలం long): కనీసం 4 లేదా 8 బైట్లు. ఫార్మాట్ స్పెసిఫైయర్ %ld.
  • long long int (లేదా long long): 8 బైట్లు (64 bits). ఇది ప్రపంచ జనాభా, దేశ బడ్జెట్, లేదా బిలియన్ల లావాదేవీలను భద్రపరచడానికి సరిపోతుంది (-9,223,372,036,854,775,808 నుండి +9,223,372,036,854,775,807 వరకు!). ఫార్మాట్ స్పెసిఫైయర్ %lld.
  • unsigned long long: కేవలం పాజిటివ్ విలువలు (0 నుండి సుమారు 1.8 × 1019 వరకు). ఫార్మాట్ స్పెసిఫైయర్ %llu.
C — Massive Numbers with long long
#include <stdio.h>

int main(void) {
    // ప్రపంచ జనాభా (సుమారు 800 కోట్లు) int లో పట్టదు; long long వాడాలి!
    long long worldPopulation = 8100000000LL; // LL ప్రత్యయం చేర్చాలి
    
    printf("ప్రపంచ జనాభా అంచనా: %lld\n", worldPopulation);
    printf("తీసుకున్న మెమరీ సైజు: %zu Bytes\n", sizeof(worldPopulation));

    return 0;
}
9కాన్‌స్టాంట్స్: const కీవర్డ్ vs #define మ్యాక్రోలు

ప్రోగ్రామ్‌లో కొన్ని విలువలు ఎప్పటికీ మారకూడదు (ఉదాహరణకు: PI = 3.14159, MAX_USERS = 100, SPEED_OF_LIGHT = 299792458). C లో వీటిని స్థిరంగా (Constants గా) ఉంచడానికి రెండు మార్గాలు ఉన్నాయి:

లక్షణం const కీవర్డ్ (ఆధునిక పద్ధతి) #define మ్యాక్రో (ప్రీప్రాసెసర్ పద్ధతి)
సింటాక్స్ const double PI = 3.14159; #define PI 3.14159 (సెమికోలన్ ఉండదు)
పనిచేసే దశ కంపైలర్ దశలో (Compiler) ప్రీప్రాసెసర్ దశలో (Text Search & Replace)
టైప్ సేఫ్టీ (Type Safety) ✅ డేటా టైప్ స్పష్టంగా ఉంటుంది (Type Safe) ❌ డేటా టైప్ ఉండదు (సాధారణ టెక్స్ట్ మాత్రమే)
మెమరీ & స్కోప్ స్కోప్ నియమాలను పాటిస్తుంది (Local / Global) ఫైల్ మొత్తం గ్లోబల్ ప్రత్యామ్నాయం అవుతుంది
డీబగ్గింగ్ సౌలభ్యం డీబగ్గర్‌లో వేరియబుల్ పేరు కనిపిస్తుంది డీబగ్గర్‌లో పేరు కనిపించదు (విలువ మాత్రమే ఉంటుంది)
💡 ఆధునిక సిఫార్సు: ఆధునిక C కోడింగ్‌లో స్థిర విలువల కోసం ఎల్లప్పుడూ const కీవర్డ్‌కే మొదటి ప్రాధాన్యత ఇవ్వాలి. దీనివల్ల పొరపాటున ఎవరైనా ఆ విలువను మార్చడానికి ప్రయత్నిస్తే కంపైలర్ error: assignment of read-only variable అని ఎర్రర్ ఇచ్చి ఆపుతుంది!
10క్యారెక్టర్ డేటా టైప్ & ASCII టేబుల్ సీక్రెట్స్

కంప్యూటర్ హార్డ్‌వేర్‌కు అక్షరాలు, గుర్తులు ఏవీ అర్థం కావు. కంప్యూటర్ అంతర్గతంగా ప్రతి అక్షరాన్ని ఒక సంఖ్యగా (Integer Code) మాత్రమే నిల్వ చేస్తుంది. ఈ అంతర్జాతీయ ప్రమాణాన్ని ASCII (American Standard Code for Information Interchange) అంటారు.

C లో char అనేది వాస్తవానికి కేవలం 1 బైట్ పూర్ణాంకం (1-byte integer) మాత్రమే! మీరు 'A' అని రాసినప్పుడు కంపైలర్ మెమరీలో 65 అనే సంఖ్యను సేవ్ చేస్తుంది:

C — Characters are Integers
#include <stdio.h>

int main(void) {
    char ch = 'A';

    // %c తో ప్రింట్ చేస్తే అక్షరం 'A' వస్తుంది
    printf("క్యారెక్టర్‌గా : %c\n", ch);

    // %d తో ప్రింట్ చేస్తే దాని ASCII సంఖ్య 65 వస్తుంది!
    printf("ASCII సంఖ్యగా : %d\n", ch);

    // క్యారెక్టర్లపై గణితం చేయవచ్చు!
    char nextChar = ch + 1; // 65 + 1 = 66 ('B')
    printf("'A' + 1 = %c (ASCII: %d)\n", nextChar, nextChar);

    // చిన్న అక్షరం నుండి పెద్ద అక్షరంగా మార్చడం (Case Conversion Logic)
    char lower = 'g';
    char upper = lower - 32; // 'a'(97) - 32 = 'A'(65)
    printf("చిన్న అక్షరం: %c -> పెద్ద అక్షరం: %c\n", lower, upper);

    return 0;
}

గుర్తుంచుకోవాల్సిన కీలకమైన ASCII సంఖ్యలు:

  • '0' నుండి '9' : ASCII 48 నుండి 57
  • 'A' నుండి 'Z' : ASCII 65 నుండి 90
  • 'a' నుండి 'z' : ASCII 97 నుండి 122 (పెద్ద మరియు చిన్న అక్షరాల మధ్య తేడా కచ్చితంగా 32!)
  • '' (Null Terminator) : ASCII 0
11బిగినర్స్ చేసే టాప్ 5 మెమరీ & వేరియబుల్ తప్పులు
❌ 1. ఇనిషియలైజ్ చేయని వేరియబుల్స్ వాడటం (Garbage Value Bug):
int score; // విలువ ఇవ్వలేదు!
printf("స్కోరు: %d", score); // ఏదో ఊహించని చెత్త విలువ (Garbage) ప్రింట్ అవుతుంది!
పైథాన్ లాగా C లో ఆటోమేటిక్‌గా సున్నా (0) సెట్ అవ్వదు. ఆ మెమరీ గదిలో ఇంతకుముందు ఏ పాత ప్రోగ్రామ్ వదిలేసిన డేటా ఉందో అదే ఉంటుంది. ఎల్లప్పుడూ int score = 0; అని ఇనిషియలైజ్ చేయాలి.
❌ 2. పూర్ణాంకాల భాగాహారంలో దశాంశాలు కోల్పోవడం (Integer Division Trap):
float result = 5 / 2; // result విలువ 2.5 రాదు; కేవలం 2.000000 మాత్రమే వస్తుంది!
C లో 5 మరియు 2 రెండూ పూర్ణాంకాలు (int) కాబట్టి ఫలితం కూడా పూర్ణాంకమే (2) అవుతుంది. దశాంశాలు రావాలంటే కనీసం ఒక సంఖ్యను ఫ్లోట్‌గా రాయాలి: float result = 5.0f / 2;.
❌ 3. తప్పుడు ఫార్మాట్ స్పెసిఫైయర్లు వాడటం:
float price = 99.99f;
printf("ధర: %d", price); // తప్పు! float కి %d వాడితే తీవ్రమైన గార్బేజ్ వస్తుంది!
float కి తప్పనిసరిగా %f, int కి %d, double కి %lf, char కి %c వాడాలి.
12ఇంటరాక్టివ్ నాలెడ్జ్ చెక్ (Self-Assessment Quiz)

ఈ రెండవ అధ్యాయంలో మీరు నేర్చుకున్న వేరియబుల్స్ మరియు మెమరీ భావనలను పరీక్షించుకోవడానికి క్రింది ప్రశ్నలపై క్లిక్ చేయండి:

❓ ప్రశ్న 1: ఆధునిక 64-bit GCC కంపైలర్‌లో int డేటా టైప్ సాధారణంగా ఎన్ని బైట్ల మెమరీని ఆక్రమిస్తుంది?
సమాధానం: 4 Bytes (32 bits). దీని పరిధి సుమారు -214 కోట్ల నుండి +214 కోట్ల వరకు ఉంటుంది.
❓ ప్రశ్న 2: ఒక unsigned char వేరియబుల్‌లో 255 ఉన్నప్పుడు దానికి 1 కలిపితే వచ్చే ఫలితం ఎంత?
సమాధానం: 0 (సున్నా). ఎందుకంటే 8-bit unsigned char గరిష్ట పరిమితి 255. ఓవర్‌ఫ్లో జరిగి విలువ తిరిగి కనిష్ట విలువైన 0 కి చేరుకుంటుంది.
❓ ప్రశ్న 3: sizeof అనేది ఫంక్షనా లేక ఆపరేటరా?
సమాధానం: ఆపరేటర్ (Compile-Time Operator). ఇది ఫంక్షన్ కాదు. కంపైలేషన్ సమయంలోనే ఆ సైజు లెక్కించబడుతుంది.
❓ ప్రశ్న 4: ఆంగ్ల పెద్ద అక్షరం 'A' యొక్క ASCII సంఖ్యా విలువ ఎంత?
సమాధానం: 65. అలాగే చిన్న అక్షరం 'a' యొక్క ASCII విలువ 97.
❓ ప్రశ్న 5: float result = 7 / 2; అని రాస్తే result లో ఏ విలువ నిల్వ ఉంటుంది?
సమాధానం: 3.000000. ఎందుకంటే 7 మరియు 2 రెండూ పూర్ణాంకాలు కాబట్టి ఇంటీజర్ డివిజన్ జరిగి ఫలితం 3 అవుతుంది. ఆ తర్వాత అది ఫ్లోట్‌గా 3.0 గా మారుతుంది. 3.5 రావాలంటే 7.0f / 2 అని రాయాలి.
13మీరే స్వయంగా Try చేయండి & సారాంశం (Quick Summary)
🚀 మీ సిస్టమ్ మెమరీ సైజులను లైవ్‌గా మన C కంపైలర్‌లో పరీక్షించండి!

పైన వివరించిన sizeof కోడ్ మరియు ASCII కోడ్‌ను మన ఆన్‌లైన్ C కంపైలర్‌లో ఓపెన్ చేసి స్వయంగా ఎగ్జిక్యూట్ చేయండి. మీ స్వంత వేరియబుల్స్ సృష్టించి వాటి సైజులను లెక్కించి చూడండి!

👉 Our Compiler లో C Compiler try చేయండి

📌 క్విక్ సారాంశం (Key Takeaways):

  • వేరియబుల్: డేటాను భద్రపరిచే పేరు గల RAM మెమరీ లొకేషన్.
  • ప్రాథమిక టైప్స్: char (1 Byte), int (4 Bytes), float (4 Bytes), double (8 Bytes).
  • sizeof: ఏ వేరియబుల్ లేదా టైప్ ఎన్ని బైట్లు ఆక్రమించిందో తెలిపే కంపైల్-టైమ్ ఆపరేటర్.
  • Signed vs Unsigned: నెగెటివ్ అవసరం లేనప్పుడు unsigned వాడితే పాజిటివ్ పరిధి రెట్టింపు అవుతుంది.
  • ఓవర్‌ఫ్లో: పరిమితి దాటితే చక్రంలా రివర్స్ అయ్యే బిహేవియర్ (Integer Overflow).
  • const: విలువను లాక్ చేసి రీడ్-ఓన్లీగా మార్చే కీవర్డ్.
తర్వాతి అధ్యాయంలో (Chapter 03): కీబోర్డ్ నుండి యూజర్ ఇన్‌పుట్ తీసుకోవడానికి ఉపయోగించే scanf() ఫంక్షన్, అడ్రస్ ఆపరేటర్ (&) యొక్క అంతర్గత పనితీరు, మరియు బిగినర్స్ నిద్రపట్టకుండా చేసే డేంజరస్ న్యూలైన్ బఫర్ ట్రాప్ & పరిష్కారాలు గురించి సమగ్రంగా నేర్చుకుందాం!
← Prev: 1. C పరిచయం & Hello World Next: 3. యూజర్ ఇన్‌పుట్ (scanf) →
OC
Written by Our Compiler Technical Editorial Team
Reviewed for accuracy & tested on GCC 13+ / Clang 17 runtime · 2026 Academic Edition