மு.சிவலிங்கம் வலையகம்

சி-மொழிப் பாடங்கள்
 

பாடம்-5
சி-மொழித் தரவினங்கள்
(Data Types in C)

ஒரு குறிப்பிட்ட பணியைச் செய்து முடிப்பதற்குக் கம்ப்யூட்டரில் புரோகிராம் எழுதுகிறோம். புரேகிராம் என்பது கம்ப்யூட்டருக்குத் தரப்படும் கட்டளைகளின் தொகுப்பாகும். வெறும் கட்டளைகளை வைத்துக் கொண்டு கம்ப்யூட்டரால் எதுவும் செய்ய முடியாது. புரோகிராம் செயல்படுவதற்குத் தேவையான விவரங்களை உள்ளீடாகத் தரவேண்டும். இவ்விவரங்களைத்தான் டேட்டா என்கிறோம். தமிழில் ‘தரவு’ எனலாம்.

ஆக, கம்ப்யூட்டர் புரோகிராம் என்பது ஒரு பணியைச் செய்து முடிப்பதற்கான தீர்வுநெறி (Algorithm), தரவுகள் (Data) - ஆகிய இரண்டையும் உள்ளடக்கியதாகும். சென்ற அத்தியாயத்தில் குறிப்பிட்டுள்ள LEAPYEAR.C என்ற புரோகிராமை எடுத்துக் கொள்ளுங்கள். அது நாம் தரும் ஆண்டினை, லீப் ஆண்டா எனப் பரிசோதித்துச் சொல்லும். நாம் உள்ளீடாகத் தரும் ஆண்டினை டேட்டா என்கிறோம். இத்தகைய தரவுகளை அடித்தளமாகக் கொண்டு, அவற்றைக் கையாளும் கட்டளைகளின் உதவியுடன் சிக்கலான புரோகிராம் மாளிகைகளை எழுப்புகிறோம்.

புரோகிராம்களில் பயன்படுத்தப்படும் ஒவ்வொறு டேட்டாவும் குறிப்பிட்ட இனத்தைச் சேர்த்ததாகவே இருக்கும். LEAPYEAR.C புரோகிராமில்,

int y;

என்று குறிப்பிட்டுள்ளோம். y என்பது ‘இன்டிஜர்’ இனத்தைச் சேர்ந்தது என்பது இதன் பொருள். இதுபோலப், பல்வேறு இனத் தரவுகளைக் கம்ப்யூட்டரில் கையாளுகிறோம்.

ஓர் அலுவலரின் பெயர், வயது, பிறந்த நாள், சம்பளம், திருமணம் ஆனவரா இல்லையா என்ற விவரம் - இவற்றையெல்லாம் புரோகிராமில் எடுத்தாள வேண்டியுள்ளது. இவை முறையே எழுத்துச் சரம் (String), முழுஎண் (Integer), தேதி (Date), பதின்மப் புள்ளி எண் (Real), ஆமில்லை (Logical) போன்ற வெவ்வேறு இன மதிப்புகளாகும். ஒவ்வொரு கம்ப்யூட்டர் மொழியும் தமக்கே உரிய தரவினங்களைக் கொண்டுள்ளன. சி-மொழியில் கையாளப்படும் தரவின வகைகளைப் பார்ப்போம்.

சி-மொழியில் நான்கு அடிப்படைத் தரவினங்கள் (Basic Data Types) உள்ளன. .இவை மூலத் தரவினங்கள் (Primitive Data Types) என்றும் அழைக்கப்படுவதுண்டு. எளிய தரவினங்கள் (Simple Data Types) என்றும் கூறுவர். தரவினம் என்பது ஒரு குறிப்பிட்ட தரவை மட்டுமின்றி அதைப் பயன்படுத்துவது பற்றிய விதிமுறைகளையும் சேர்த்தே குறிக்கிறது. ஒரு தரவினம் குறிப்பிட்ட மதிப்புகளையே (values) ஏற்கும். குறிப்பிட்ட செயல்பாடுகளையே (operations) அதன்மீது நிகழ்த்த முடியும்.

சி-மொழியின் தரவினங்களில் சில உள்-வகைகளும் உள்ளன. மூலத் தரவினங்களின் அடிப்படையில் உருவாக்கப்படும் தருவிக்கப்பட்ட தரவினங்களும் (Derived Data Types) சி-மொழியில் கையாளப்படுகின்றன.

 மூலத் தரவினங்கள் (Basic Data Types)

சி-மொழியின் அடிப்படை அல்லது மூலத் தரவினங்கள்:

1. char
2. int
3. float
4. double

char என்பது ஒற்றை எழுத்து, எண் அல்லது சிறப்புக் குறியைக் (special character) குறிக்கிறது. int என்பது முழு எண்களையும் float என்பது மெய்யெண் (Real Number) எனப்படும் புள்ளி எண்களையும் double என்பது துல்லியப் புள்ளி எண்களையும் குறிக்கின்றன. ஒன்றுக்கு மேற்பட்ட எழுத்துகள் அடங்கிய சரத்தைக் (String) குறிக்கத் தனியான தரவினம் சி-மொழியில் கிடையாது. அதே வேளையில், எண்வகை இனம் int, float, double என்ற மூன்று தனித்தனி தரவினங்களாக அமைந்துள்ளன.

இந்த நான்கு மூலத் தரவினங்களையும் அடிப்படையாகக் கொண்டு அர்ரே, ஸ்ட்ரக்சர், யூனியன், ஈநம், பாயின்டர் என்னும் தருவிக்கப்பட்ட தரவினங்களும் (Derived Data Types) கையாளப்படுகின்றன. இவற்றைப்பற்றி பின்வரும் அத்தியாயங்களில் விரிவாகப் படிப்போம். சி-மொழியில் ஸ்டிரிங் தரவினம் இல்லை. ஸ்டிரிங்குகளைக் கையாள கேரக்டர் அர்ரேக்கள் பயன்படுத்தப்படுகின்றன. சி-மொழியில் தேதிக்கென்று தனி இனம் கிடையாது. அதேபோல் சரி/தவறு (True/Flase) என்ற லாஜிக்கல் இனமும் கிடையாது. ஜீரோ என்கிற எண் மதிப்பு False என்பதற்கும், ஒன்று அல்லது ஏதேனும் ஒரு நிறை எண் (Positive number) True என்ற நிலைக்கும் பயன்படுத்தப்படுவது சி-மொழியின் சிறப்புக் கூறாகும்.

 உள்-வகைகள்

நான்கு மூலத் தரவினங்களும், அவை ஏற்கும் மதிப்பெல்லைகளை அடிப்படையாகக் கொண்டு, பல்வேறு உட்பிரிவுகளாகப் பிரிக்கப்படுகின்றன: int இனம் மூன்று வகையாக எடுத்தாளப்படுகிறது.

1. short int
2. int
3. long int

மேற்கண்ட மூன்று இனங்களும் நினைவகத்தில் எடுத்துக் கொள்ளும் இடம் (பைட் எண்ணிக்கை) கம்ப்யூட்டரைப் பொறுத்து மாறுபடுகின்றது. அதாவது பீசி, மினி, மெயின் ஃபிரேம்களில் இந்த அளவுகள் மாறுபடலாம். ஆனால் short int என்பது int-ஐவிட அதிக பைட்டுகளை எடுத்துக் கொள்ள முடியாது. சில கம்ப்யூட்டர்களில் short int நினைவகத்தில் எடுத்துக் கொள்ளும் பைட்டு எண்ணிக்கை int எடுத்துக் கொள்வதில் பாதியாக இருக்கலாம். அதேபோல் long int என்பது int அளவைப்போல் இரு மடங்கு இருக்கும். எல்லா கம்ப்யூட்டரிலும் அப்படி இருக்கும் என்று சொல்ல முடியாது. ஆனால் int என்பது long int-ஐவிட அதிக அளவுடையதாக இருக்க முடியாது.

புரோகிராம்களில் தரவினங்களைக் குறிப்பிடுகையில் short int என்பதை வெறுமனே short எனவும், long int என்பதை long எனவும் குறிப்பிட்டால் போதும். டர்போ-சி கம்ப்பைலரைப் பொறுத்தவரை short int என்பதும் int என்பதும் ஒன்றுதான். long int என்பது int -ஐவிட இரு மடங்கு பைட்டு அளவுடையது.

பதின்மப் புள்ளி எண்களைப் பொறுத்தவரை double இனம் float இனத்தைவிட இரு மடங்கு பைட்டுகளை நினைவகத்தில் எடுத்துக் கொள்ளும். இதுவும் கம்ப்யூட்டர் சார்ந்த (Machine Dependent) அளவீடுதான். double இனம் long float எனவும் வரையறுக்கப்படும். அன்சி-சி, long double என்னும் ஒரு புதிய உள்-வகைக்கு வழியமைத்துக் கொடுத்துள்ளது. இது double இனத்தைவிட அதிக அளவு இடத்தை எடுத்துக் கொள்ளும்.

சி-மொழியில் char, int ஆகிய தரவு இனங்களை signed, unsigned ஆகிய பண்புகளினால் வேறுபடுத்திக் காட்ட முடியும். தரவு இனங்களை அறிவிக்கும்போது signed char, unsigned char எனவும் signed int, unsigned int எனவும் signed long, unsigned long எனவும் அறிவிக்க முடியும். signed இனம் நெகட்டிவ், பாஸிட்டிவ் ஆகிய இரு மதிப்புகளையும் ஏற்கும். unsigned இனம் பாஸிட்டிவ் மதிப்புகளை மட்டுமே ஏற்கும். இதன் காரணமாய் unsigned இனம் ஏற்கும் உச்சமதிப்பு signed இனத்தின் உச்சமதிப்பைவிட இருமடங்கு இருக்கும்.

short, long, signed, unsigned ஆகியவை தனித் தரவினங்களாகக் கருதப்படுவது இல்லை. இச்சொற்கள் பண்பேற்றிகள் (Qualifiers அல்லது Modifiers) என்று அழைக்கப்படுகின்றன. எனவேதான் இத்தகைய அடைமொழி பெற்ற தரவினங்களை ‘உள்-வகை’ எனக் குறிப்பிட்டுள்ளோம். தரவின அறிவிப்பில் வெறுமனே char, int, long எனக் குறிப்பிட்டால் signed char, signed int, signed long ஆகிய இனங்களையே குறிக்கும்.

 தரவு இனம், மதிப்பெல்லை, நினைவக அளவு

இதுவரை நாம் பார்த்த தரவினங்கள் மற்றும் அவற்றின் உள்-வகைகள் ஏற்கும் மதிப்புகளின் எல்லைகளையும், இவ்வினங்கள் நினைவகத்தில் எடுத்துக் கொள்ளும் பைட் அளவுகளையும் கீழே உள்ள பட்டியலில் காண்க:

தரவு இனம் மதிப்பின் எல்லை நினைவக அளவு (பைட்டில்)
signed char -128 to +127 1
char -128 to +127 1
unsigned char 0 to 255 1
signed short int -32768 to +32767 2
short int-32768 to +32767 2
unsigned short int 0 to 65535 2
signed int -32768 to +32767 2
int -32768 to +32767 2
unsigned int 0 to 65535 2
signed long int -2147483648 to +2147483647 4
long int -2147483648 to +2147483647 4
unsigned long int 0 to 4294967295 4
float .4 x 10-38 to 3.4 x 1038 4
long float .7 x 10-308 to 1.7 x 10308 8
double .7 x 10-308 to 1.7 x 10308 8
long double .7 x 10-4932 to 1.7 x 104932 10

பட்டியலின் இறுதியில் குறிப்பிட்டுள்ள நினைவக அளவு கம்ப்யூட்டருக்குக் கம்ப்யூட்டர் வேறுபடலாம். சில கம்ப்பைலர்கள் char என அறிவிக்கப்படும் தரவினத்தை எப்போதும் unsigned char இனமாகவே கருதிக்கொள்ளும். அதாவது char என்பது 0 முதல் 255 வரையிலான மதிப்புகளையே எடுத்துக்கொள்ளும். நெகட்டிவ் மதிப்புகளை ஏற்காது. எனவே char இனத்தைக் கம்ப்பைலருக்கு ஏற்பப் பயன்படுத்த வேண்டும் என்பதை மனதில் கொள்க.

int என அறிவிக்கப்பட்ட மாறியில் 36767-ஐவிடப் பெரிய எண்ணை இருத்தி வைக்க முடியாது. எடுத்துக்காட்டாக 200 x 200 என்ற பெருக்குத் தொகையின் விடையை ஓர் int மாறியில் இருத்த முடியாது. உங்கள் புரோகிராமில்,

int n;
n = 200 * 200;

என்று, கட்டளைகள் அமைந்துள்ளதாக வைத்துக் கொள்வோம். புரோகிராமைக் கம்ப்பைல் செய்யும்போது, கம்ப்பைலர் பிழை எதுவும் சுட்டாது. புரோகிராமைச் செயல்படுத்தும்போது இயக்கநேரப் பிழை (Run Time Error) எதுவும் நிகழாது. ஆனால், புரோகிராம் தவாறான விடையைக் காட்டும். n என்னும் மாறியில் 40000 என்னும் மதிப்பு இருக்காது. இதுபோன்ற தருணங்களில் n என்னும் மாறியை long என அறிவித்துக் கொள்ள வேண்டும். உங்கள் புரோகிராம்களில் கணக்கீடுகளை மேற்கொள்ளும்போது தரவினங்களின் மதிப்பெல்லைகளை நினைவில் வைத்துக் கொள்வது முக்கியம்.

இந்த வலையகத்தில்

இவ்வலையகத்தின் பக்கங்கள் இன்டர்நெட் எக்ஸ்புளோரர்-8, 1024 X 768 பிக்செல் திரைக்கேற்ப வடிவமைக்கப்பட்டுள்ளன
வலையக வடிவமைப்பு, உள்ளடக்கப் பதிப்புரிமை © 2009 மு.சிவலிங்கம்