వేరియబుల్స్, డేటా టైప్స్, కాన్స్టాంట్స్ & మెమరీ మోడల్
ఒక పెద్ద గిడ్డంగిని (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 కీవర్డ్ ల యొక్క సమగ్ర అంతర్గత పనితీరును లోతుగా నేర్చుకుందాం!
- 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 లోతైన ఆలోచింపజేసే ప్రశ్నలు & వివరణలు.
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 లోని ఒక నిర్దిష్ట అడ్రస్ వద్ద ఆ వేరియబుల్ సైజుకు సరిపడా బైట్లను రిజర్వ్ చేస్తుంది.
వేరియబుల్ (Variable): కంప్యూటర్ మెమరీ లొకేషన్కు మనం ఇచ్చే అర్థవంతమైన పేరు. ఆ లొకేషన్లో ఉన్న విలువ ప్రోగ్రామ్ రన్ అవుతున్న సమయంలో మారవచ్చు (Vary కావచ్చు) కాబట్టి దీనికి "వేరియబుల్" అని పేరు వచ్చింది.
డిక్లరేషన్ వర్సెస్ ఇనిషియలైజేషన్:
int age;
కంపైలర్కు "age" అనే పేరుతో 4 బైట్ల మెమరీని రిజర్వ్ చేయమని చెబుతుంది. కానీ ఇందులో ప్రస్తుతానికి ఏ విలువ ఉందో తెలియదు (గార్బేజ్ వేల్యూ ఉంటుంది).
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మూడు వేర్వేరు వేరియబుల్స్!
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) |
#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;
}
చాలామంది బిగినర్స్ "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 మోడల్) లో
long8 బైట్లు ఉంటుంది, కానీ Windows 64-bit (LLP64 మోడల్) లోlongకేవలం 4 బైట్లు మాత్రమే ఉంటుంది! అందుకే ప్లాట్ఫామ్-ఇండిపెండెంట్ కోడ్ కోసం ఆధునిక C లో<stdint.h>ఉపయోగిస్తాం.
మీ కంప్యూటర్లో ఏ డేటా టైప్ ఎన్ని బైట్లు ఆక్రమిస్తుందో ఊహించాల్సిన పనిలేదు; C మనకు sizeof అనే ఇన్-బిల్ట్ కంపైల్-టైమ్ ఆపరేటర్ను అందించింది. ఇది ఒక ఫంక్షన్ కాదు, ఇది ఒక ఆపరేటర్ (Keyword Operator). దీని రిటర్న్ టైప్ size_t (అన్సైన్డ్ పూర్ణాంకం), కాబట్టి దీనిని ప్రింట్ చేయడానికి %zu లేదా %lu ఉపయోగిస్తాం:
#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% ప్రభావం కూడా ఉండదు!
సాధారణంగా ఒక డేటా టైప్కు ముందు ఏమీ రాయకపోతే అది డీఫాల్ట్గా 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) అంటారు:
#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;
}
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.
#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;
}
ప్రోగ్రామ్లో కొన్ని విలువలు ఎప్పటికీ మారకూడదు (ఉదాహరణకు: 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) | ఫైల్ మొత్తం గ్లోబల్ ప్రత్యామ్నాయం అవుతుంది |
| డీబగ్గింగ్ సౌలభ్యం | డీబగ్గర్లో వేరియబుల్ పేరు కనిపిస్తుంది | డీబగ్గర్లో పేరు కనిపించదు (విలువ మాత్రమే ఉంటుంది) |
error: assignment of read-only variable అని ఎర్రర్ ఇచ్చి ఆపుతుంది!
కంప్యూటర్ హార్డ్వేర్కు అక్షరాలు, గుర్తులు ఏవీ అర్థం కావు. కంప్యూటర్ అంతర్గతంగా ప్రతి అక్షరాన్ని ఒక సంఖ్యగా (Integer Code) మాత్రమే నిల్వ చేస్తుంది. ఈ అంతర్జాతీయ ప్రమాణాన్ని ASCII (American Standard Code for Information Interchange) అంటారు.
C లో char అనేది వాస్తవానికి కేవలం 1 బైట్ పూర్ణాంకం (1-byte integer) మాత్రమే! మీరు 'A' అని రాసినప్పుడు కంపైలర్ మెమరీలో 65 అనే సంఖ్యను సేవ్ చేస్తుంది:
#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
int score; // విలువ ఇవ్వలేదు!
printf("స్కోరు: %d", score); // ఏదో ఊహించని చెత్త విలువ (Garbage) ప్రింట్ అవుతుంది!
పైథాన్ లాగా C లో ఆటోమేటిక్గా సున్నా (0) సెట్ అవ్వదు. ఆ మెమరీ గదిలో ఇంతకుముందు ఏ పాత ప్రోగ్రామ్ వదిలేసిన డేటా ఉందో అదే ఉంటుంది. ఎల్లప్పుడూ int score = 0; అని ఇనిషియలైజ్ చేయాలి.
float result = 5 / 2; // result విలువ 2.5 రాదు; కేవలం 2.000000 మాత్రమే వస్తుంది!
C లో 5 మరియు 2 రెండూ పూర్ణాంకాలు (int) కాబట్టి ఫలితం కూడా పూర్ణాంకమే (2) అవుతుంది. దశాంశాలు రావాలంటే కనీసం ఒక సంఖ్యను ఫ్లోట్గా రాయాలి: float result = 5.0f / 2;.
float price = 99.99f;
printf("ధర: %d", price); // తప్పు! float కి %d వాడితే తీవ్రమైన గార్బేజ్ వస్తుంది!
float కి తప్పనిసరిగా %f, int కి %d, double కి %lf, char కి %c వాడాలి.
ఈ రెండవ అధ్యాయంలో మీరు నేర్చుకున్న వేరియబుల్స్ మరియు మెమరీ భావనలను పరీక్షించుకోవడానికి క్రింది ప్రశ్నలపై క్లిక్ చేయండి:
❓ ప్రశ్న 1: ఆధునిక 64-bit GCC కంపైలర్లో int డేటా టైప్ సాధారణంగా ఎన్ని బైట్ల మెమరీని ఆక్రమిస్తుంది?
❓ ప్రశ్న 2: ఒక unsigned char వేరియబుల్లో 255 ఉన్నప్పుడు దానికి 1 కలిపితే వచ్చే ఫలితం ఎంత?
❓ ప్రశ్న 3: sizeof అనేది ఫంక్షనా లేక ఆపరేటరా?
❓ ప్రశ్న 4: ఆంగ్ల పెద్ద అక్షరం 'A' యొక్క ASCII సంఖ్యా విలువ ఎంత?
❓ ప్రశ్న 5: float result = 7 / 2; అని రాస్తే result లో ఏ విలువ నిల్వ ఉంటుంది?
7.0f / 2 అని రాయాలి.
పైన వివరించిన sizeof కోడ్ మరియు ASCII కోడ్ను మన ఆన్లైన్ C కంపైలర్లో ఓపెన్ చేసి స్వయంగా ఎగ్జిక్యూట్ చేయండి. మీ స్వంత వేరియబుల్స్ సృష్టించి వాటి సైజులను లెక్కించి చూడండి!
📌 క్విక్ సారాంశం (Key Takeaways):
- వేరియబుల్: డేటాను భద్రపరిచే పేరు గల RAM మెమరీ లొకేషన్.
- ప్రాథమిక టైప్స్: char (1 Byte), int (4 Bytes), float (4 Bytes), double (8 Bytes).
- sizeof: ఏ వేరియబుల్ లేదా టైప్ ఎన్ని బైట్లు ఆక్రమించిందో తెలిపే కంపైల్-టైమ్ ఆపరేటర్.
- Signed vs Unsigned: నెగెటివ్ అవసరం లేనప్పుడు unsigned వాడితే పాజిటివ్ పరిధి రెట్టింపు అవుతుంది.
- ఓవర్ఫ్లో: పరిమితి దాటితే చక్రంలా రివర్స్ అయ్యే బిహేవియర్ (Integer Overflow).
- const: విలువను లాక్ చేసి రీడ్-ఓన్లీగా మార్చే కీవర్డ్.
scanf() ఫంక్షన్, అడ్రస్ ఆపరేటర్ (&) యొక్క అంతర్గత పనితీరు, మరియు బిగినర్స్ నిద్రపట్టకుండా చేసే డేంజరస్ న్యూలైన్ బఫర్ ట్రాప్ & పరిష్కారాలు గురించి సమగ్రంగా నేర్చుకుందాం!