اساسيات #C
المتغيرات:
* المتغير هو عنوان منطقة محجوزة في الذاكرة يمكن الكتابة فيها والقراءة منها
* يتم التصريح عن المتغيرات باستخدام الشكل العام التالي:
一一一一一一一一一一一
;type variable name
一一一一一一一一一一一
أمثلة :
int m;
int n, k;
int l = 100;
int a = 100, b, c = 200, d;
*يمكن أن يحتوي اسم المتغير على أحرف أو أرقام أو إشارة
* يجب أن يبدأ اسم المتغير بحرف أو إشارة _
* لا يمكن استخدام كلمات اللغة المفتاحية كإسم للمتغير.
* تتأثر اللغة بحالة الأحرف فالمتحول x هو غير X.
ملاحظة:لا يجوز التعامل مع متحول لم يعطى قيمة ابتدائية. فالتعليمات التالية مثالا:
int i, j;
i = j;
ستولد الخطأ التالي(استخدام متغير دون قيمة) :
Use of unassigned local variable j
أنماط البيانات:
يحدد نمط بيانات المتغير القيم التي يمكن أن تسند للمتغير . كما يختلف حجم التخزين المطلوب للمتغير حسب نمطه.
1 .أنماط الأعداد الصحيحة:
نعرض في الجدول التالي جميع أنماط الأعداد الصحيحة التي توفرها لنا لغة #C.
الوصف مجال القيم الاسم
sbyte -128 to 127 signed 8-bit integer
byte 0 to 255 unsigned 8-bit integer
short -32,768 to 32,767 signed 16-bit integer
ushort 0 to 65,535 usigned 16-bit integer
int -2,147,483,648 to 2,147,483,647 signed 32-bit integer
uint 0 to 4,294,967,295 usigned 32-bit integer
long -9,223,372,036,854,775,808 to
9,223,372,036,854,775,807 signed 64-bit integer
ulong 0 to 18,446,744,073,709,551,615 usigned 64-bit integer
2 .أنماط الأعداد العشرية:
نعرض في الجدول التالي جميع أنماط الأعداد العشرية التي توفرها لنا لغة #C.
الوصف مجال القيم الاسم
float + - 1.5*10_45 to + - 3.4*1038 7 digits precision
double + - 0.5 *10_324 to + - 1.7*10308 15_16 precision digits
decimal + - 1.0*10_28 to + - 7.9*1028 28_29 precision digits
3 .النمط المنطقي :
يستخدم هذا النمط لتخزين قيمة منطقية صح ام خطأ.
الوصف مجال القيم الاسم
4.النمط المحرفي:
يستخدم هذا النمط لتخزين محرف واحد.
الوصف مجال القيم الاسم
5. السلاسل النصية:
يستخدم هذا النمط لتخزين سلسلة من المحارف.
الوصف مجال القيم الاسم
أمثلة :
char a = 'f';
string s1 = "Hello ";
string s2 = "World";
string s3 = s1 + s2;
//s3 is now "Hello World"
التحويل الضمني Implicit Conversion :
يمكن بشكل عام إسناد متغير من نمط إلى متغير من نمط آخر بشكل مباشر في حال كان مجال قيم المتغير الأول ضمن مجال قيم المتغير الثاني(بما معناه اسناد المتغير الصغير ضمن المتغير الكبير).
مثلا :
int i = 100;
long j;
j = i;
يبين الجدول التالي من أجل كل نمط من الأنماط التي يمكن الإسناد إليها بشكل ضمني:
From To
sbyte short, int, long, float, double, decimal
byte short, ushort, int, uint, long, ulong, float, double, decimal
short int, long, float, double, decimal
ushort int, uint, long, ulong, float, double, decimal
int long, float, double, decimal
uint long, ulong, float, double, decimal
Long, ulong float, doule, decimal
float double
التحويل الصريح Explicit Conversion :
* يمكن أيضاً إجراء عملية "قصر" بحيث نقوم بإسناد متغير من نمط ذو مجال قيم أكبر إلى نمط ذو مجال قيم أقل. بالطبع، يمكن الا تعطي هذه العملية نتائج صحيحة في حال كانت القيم المسندة خارج مجال المتغير المسند إليه.
* يمكن استخدام الطريقة checked لإطلاق استثناء في حال كانت عملية القصر تعطي نتائج صحيحة.
أمثلة :
//Explicit Conversion
long v = 30000;
int i= (int) v ;
//A valid Cast. The max is 2147483647
// i will be 30000
long g=3000000000;
int j= (int) v;
//An invalid Cast. The max is 2147483647
//j will be -129947296
int k= checked((int) g);
// throw an overflow exception if needed
double p=25.7;
int m= (int) p;
// m will be 25
char c = 'A';
int i = (int)c;
//i will be 65
int i = 10;
string s = i.ToString();
//s will be "10"
string ss = "300";
int j = int.Parse(ss);
//j will be 300
string sss = "34.678";
double x = double.Parse(sss);
//x will be 34.678
int k = int.Parse(sss);
//Throw an exception
اليكم هذا الفيديو لتوضيح كل ما سبق ..
وهكذا نكون قد عرضنا الانماط و طرق التحويل و القصر ...... تحياتي 🍀