Theory
3 values, 3 shape के डिब्बे
Marks program बढ़ रहा है और आज उसे 3 चीज़ें रखनी हैं: marks 78, percentage 78.5, और grade 'A'।
तीनों को int डिब्बों में उड़ेलकर देखिए: 78 ठीक-ठीक बैठ जाता है, 78.5 अपना .5 खो देता है, और 'A' ऐसा number बन जाता है जो आपने माँगा ही नहीं था।
डिब्बों की shape होती है। Shape चुनने का काम data type करता है, और गलत चुनना C program के आपसे झूठ बोलने का सबसे ख़ामोश तरीक़ा है।
Theory
डिब्बों का set
रसोई के डिब्बों के set में shapes किसी वजह से होती हैं: rotis के लिए चपटा, दाल के लिए लंबा, इलायची के लिए नन्हा। दाल को roti वाले डिब्बे में डालिए और आधी गिर जाएगी। Data types यही shapes हैं: पूरे numbers के लिए int, decimal वाली values के लिए float/double, एक अकेले character के लिए char। Type डिब्बे का SIZE (bytes में) भी fix करता है, जिससे तय होता है कि कितनी बड़ी value समाएगी।
At a glance
C का type परिवार (आम तौर पर sizes)
| Type | Bytes | क्या रखता है | Marks program में |
|---|---|---|---|
| short int | 2 | छोटे पूरे numbers | age |
| int | 4 | पूरे numbers | marks = 78 |
| long | 4/8 | बड़े पूरे numbers | college का enrolment no. |
| float | 4 | Decimals, ~6-7 digits | percentage = 78.5 |
| double | 8 | Decimals, ~15 digits | बारीक averages |
| char | 1 | एक character (ASCII के रूप में) | grade = 'A' |
Theory
खास वाले: string, void, signed/unsigned
- string: C का basic type नहीं है।
"Riya"जैसा text एक char array है, char डिब्बों की एक क़तार, double quotes में लिखी। पूरी कहानी Unit 3 में; अभी इतना जानिए कि 'A' और "A" अलग क्यों हैं। - void: "कोई value नहीं" वाला type, उन functions के लिए जो कुछ नहीं लौटाते। कोई variable void declare नहीं होता।
- signed / unsigned: signed int में एक bit sign रखता है, बचता है ~±214 करोड़।
unsigned intdeclare कीजिए तो वह bit भी value में जुड़ जाता है: negatives बंद, positive पहुँच दुगनी (~429 करोड़)। ऐसी गिनतियों के लिए perfect जो कभी negative हो ही नहीं सकतीं।
Practical
Marks program, सही types के साथ
#include <stdio.h>
int main() {
int marks = 78;
float percentage = 78.5;
char grade = 'A';
unsigned int total_students = 60;
printf("Marks: %d\n", marks);
printf("Percentage: %f\n", percentage);
printf("Grade: %c\n", grade);
return 0;
}This example runs in Gri-Learn on the web, where you can edit it and see the output.
Quiz
आप int percentage = 78.5; declare करते हैं। डिब्बे में असल में क्या रखा होगा?
- 78, decimal वाला हिस्सा कट जाता है
- 78.5, C डिब्बा अपने आप adjust कर लेता है
- 79, C nearest पूरे number तक round करता है
- 0, program value लेने से मना कर देता है
Show the answer
78, decimal वाला हिस्सा कट जाता है
int डिब्बे में decimals के लिए कोई खाना नहीं है, इसलिए C truncate करता है: .5 गिरा दिया जाता है, round नहीं होता, 78.9 भी 78 ही बनता। ज़्यादातर compilers में न error, न warning, बस चुपचाप data का नुक़सान, इसीलिए type का चुनाव मायने रखता है। "Truncation, not rounding" वही phrase है जिस पर exams marks देते हैं।
Think first
char का वह राज़ जो आप पहले से जानते हैं
char डिब्बा 1 byte का है, और bytes numbers रखते हैं। तो 'A' store करने पर डिब्बे में कौन सा number बैठता है? यह आपने BCA103 में पढ़ा है।
Show the answer
65, ASCII code। char असल में character की पोशाक पहने एक छोटा number-डिब्बा है: 'A' में 65, 'a' में 97, '0' में 48 रहता है। इसीलिए grade + 1 C में legal है और 66 ('B') देता है। आपकी BCA103 वाली ASCII table अभी-अभी programming का औज़ार बन गई।
Watch out
Marks कहाँ कटते हैं
string को C का basic data type कहना: वह char array है, और examiners यही जाँचते हैं। Sizes को universal क़ानून की तरह लिखना: वे typical हैं (int "आम तौर पर 4 bytes" होता है, compiler पर निर्भर), यह लिखिए। Quotes की गड़बड़: 'A' char है, "A" 2 bytes की string है (A और एक छिपा end-marker)। और unsigned का मतलब "sign लिखा नहीं" नहीं है: मतलब है उस डिब्बे के लिए negatives नामुमकिन हैं।
Theory
Professional की तरह चुनना
काम का नियम: पूरी गिनतियाँ → int (negatives नामुमकिन हों तो unsigned), पैसे और percentages → float, science-grade बारीकी → double, एक अक्षर/चिह्न → char। Shapes अभी सही कर लीजिए, क्योंकि अगला lesson verbs थमाता है, operators, और 78 / 60 int डिब्बों में float डिब्बों से बहुत अलग बर्ताव करता है।
Summary
Key takeaways
- Data type डिब्बे का size (bytes) और उसमें समाने वाली values fix करता है।
- पूरे numbers: short int, int, long; decimals: float (~7 digits), double (~15)।
- char एक character रखता है, अपने ASCII number के रूप में; 'A' यानी 65।
- string char array है (double quotes), basic type नहीं; void यानी कोई value नहीं।
- unsigned negatives की क़ुर्बानी देकर positive range दुगनी करता है।
- int डिब्बे decimals काट देते हैं: 78.5 बनता है 78, कोई rounding नहीं।
- याद रखने का hook: डिब्बों का set, सही चीज़ के लिए सही shape।