زبان C – عملگرها (جلسه ۷)
زمان تقریبی مطالعه این مقاله: ۱۰ دقیقه
سلام به دوستان خوب میکرولرنی 🙂 🙂 🙂
این مقاله در ۲۹ اردیبهشت ۱۴۰۰ به روز رسانی شده.
دوستای خوبم امیدوارم که حالتون خوب باشه و توی مسیربرنامه نویسی هر روز بهتر حرکت کنید. طبق معمول لازمه یادگیری این جلسه مرور جلسههای قبلی هست. دقت کنید که تا حالا انواع داده در زبان C را به همراه مثال هایی معرفی کردیم. حالا نوبت به این رسیده که روی این داده ها بتونیم پردازش هایی را انجام بدیم. پس مقاله عملگر در زبان C راشروع میکنیم. 🙂 با میکرولرن، مرجع برنامه نویسی C همراه باشید.
لطفا قبل از مطالعه این بحث، در صورت نیاز مباحث زیر را مطالعه کنید:
فهرست مطالب
عملگر ها در زبان C
عملگر یا operator سمبلی است که به کامپایلر می گوید یک عملیات محاسباتی، منطقی یا … را اجرا کند. به عنوان مثال وقتی عملگر + بین دو مقدار عددی ۱۰ و ۲۴ به شکل ۱۰+۲۴ قرار میگیرد. مفهوم آن عمل جمع زدن این دو مقدار است و نتیجه این عمل ۳۴ میشود. مقادیری که عملگرها بر روی آنها عمل میکنند را، عملوند میگویند.
در واقع عملگرها عاملهایی هستند که به وسیله آنها میتوان بر روی اعداد، متغیرها، آرایهها، رشتهها و … عملیات حسابی، منطقی، مقایسه، بیتی، بایتی و … انجام داد. عملگرها در همهی زبانهای برنامه نویسی وجود دارند و جزء بخشهای اصلی یک زبان برنامه نویسی هستند. زبان C از نظر ساختار داخلی بسیار قوی بوده و عملگرهای قدرتمندی را به طور پیش فرض دارا می باشد. عملگرها در زبان c به چند دسته تقسیم می شوند:
عملگر های حسابی
عملگرهای محاسباتی، عملگرهایی هستند که اعمال محاسباتی را روی عملوندها انجام میدهند. جدول زیر تمام عملگرهای حسابی را که به وسیله زبان C پشتیبانی می شود نشان میدهد. فرض کنید متغیر A دارای مقدار ۱۰ و متغیر B دارای مقدار ۲۰ است.
عملگر % برای محاسبه باقیمانده تقسیم به کار میرود. این عملگر عملوند اول را بر عملوند دوم تقسیم میکند (تقسیم صحیح) و باقیمانده را برمیگرداند.
دو عملگر ++ و – – می توانند در طرف چپ یا راست عملوند قرار بگیرند. اگر به تنهایی و در یک خط دستور به کار برده شوند، فرقی نمیکند اما اگر در یک معادله به کار برده شوند، اینکه طرف راست یا چپ قرار گیرند، مهم است.
برای درک موضوع به مثال زیر توجه کنید:
int x = 10;
x++;
++x;
y = ++x;
++y = x;
- در خط یک متغیر x از نوع int تعریف و با ۱۰ مقدار دهی اولیه میشود.
- در خط دو x یک واحد افزایش یافته و برابر با ۱۱ می شود.
- در خط سه x یک واحد افزایش یافته و برابر با ۱۲ می شود.
- در خط چهار ابتدا x یک واحد افزایش یافته، برابر با ۱۳ شده و سپس این مقدار به y تخصیص داده می شود. ( ابتدا یک واحد به مقدار متغیر x اضافهشده و سپس درون متغیر y قرار میگیرد)
- در خط پنج ابتدا مقدار فعلی x یعنی ۱۳ به y اختصاص داده شده و سپس x یک واحد افزایش یافته برابر با ۱۴ می شود.(ابتدا مقدار متغیر x درون متغیر y قرارگرفته و سپس یک واحد به آن اضافه میشود)
به مثالی دیگر دقت کنید:
int x = 5;
y = ++x * 2;
پس از اجرای دستورالعملهای فوق y = 12 خواهد شد. (ابتدا برای خودتان علت را توضیح دهید و سپس در محیط کدنویسی کدبلاکس این موضوع را تست کنید.)
در ادامه یک مثال جامع را بررسی میکنیم. البته برای فهم بهتر این مثال اگر با مفاهیم تابع و فایلهای Header آشنایی کافی ندارید، از مقاله تابع و دستورات پیش پردازنده مطالب لازم را مطالعه کنید.
#include <stdio.h>
main(){
int a = 21;
int b = 10;
int c;
c = a + b;
printf("Line 1 - Value of c is%d\n", c );
c = a - b;
printf("Line 2 - Value of c is %d\n", c );
c = a * b;
printf("Line 3 - Value of c is %d\n", c );
c = a / b;
printf("Line 4 - Value of c is %d\n", c );
c = a % b;
printf("Line 5 - Value of c is %d\n", c );
++c = a;
printf("Line 6 - Value of c is %d\n", c );
--c = a;
printf("Line 7 - Value of c is %d\n", c );
}
پس از کامپایل و اجرای برنامه نتایج زیر حاصل میشود:
Line 1 - Value of c is 31
Line 2 - Value of c is 11
Line 3 - Value of c is 210
Line 4 - Value of c is 2
Line 5 - Value of c is 1
Line 6 - Value of c is 21
Line 7 - Value of c is 22
- در این مثال کتابخانه استاندارد stdio.h به برنامه include شده است.
- در تابع main دو متغیر a و b تعریف و مقدار دهی شده اند. متغیر c هم تعریف شده تا حاصل عملیات a و b در آن ذخیره شود.
- تابع ()printf برای چاپ اطلاعات در خروجی به کار میرود.
- در تابع ()printf هرچه بین double quotes است چاپ میشود اما به جای d% مقدار متغیر c (که بعد از کاما قرار گرفته است) قرار می گیرد.
- آن چه که در line 1 قرار می گیرد حاصل جمع a و b است. بقیه خط ها را سعی کنید خودتان تفسیر کنید.
- اما همانطور که در خط ۴ میبینید، حاصل تقسیم برابر ۲ شده است؛ این در حالی است که تقسیم ۲۱ بر ۱۰ ظاهرا باید اعشاری شود. نکته مهم اینجاست که اعداد ۲۱ و ۱۰ از نوع صحیح میباشند و متغیر نهایی که حاصل باید در آن قرار داده شود(یعنی C) هم از نوع صحیح است، بنابراین کامپایلر C قسمت اعشار را به طور اتوماتیک حذف کرده است.
عملگرهای بیتی
عملگرهای بیتی روی بیتها کار میکنند و عملیات را بیت به بیت انجام میدهند. جدول درستی برای عملیاتهای & (AND) و | (OR) و ^ (XOR) به ترتیب زیر است:
حال که با عملیات بیتی آشنا شدید این عملیات را روی دو عدد ۸ بیتی اجرا می کنیم. فرض کنید که A=60 و B=13 باشد. معادلهای باینری آنها به شکل زیر هستند:
A = 0011 1100
B = 0000 1101
—————–
A & B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
A = 1100 0011~
جدول زیر عملگرهای بیتی پشتیبانی شده توسط زبان C را نشان می دهد. مقادیر A و B را به ترتیب همان ۶۰ و ۱۳ فرض کنید.
به مثال زیر دقت کنید:
#include <stdio.h>
main(){
unsigned int a = 60;
unsigned int b = 13;
int c = 0;
c = a & b; //12 = 0000 1100
printf("Line 1 - Value of c is %d\n", c );
c = a | b; // 61 = 0011 1101
printf("Line 2 - Value of c is %d\n", c );
c = a ^ b; // 49 = 0011 0001
printf("Line 3 - Value of c is %d\n", c );
c = ~a; // -61 = 1100 0011
printf("Line 4 - Value of c is %d\n", c );
c = a << 2; // 240 = 1111 0000
printf("Line 5 - Value of c is %d\n", c );
c = a >> 2; // 15 = 0000 1111
printf("Line 6 - Value of c is %d\n", c );
}
پس از کامپایل شدن و اجرای برنامه بالا نتایج زیر بدست میآید:
Line 1 - Value of c is 12
Line 2 - Value of c is 61
Line 3 - Value of c is 49
Line 4 - Value of c is -61
Line 5 - Value of c is 240
Line 6 - Value of c is 15
در این مثال هم مانند مثال عملگرهای محاسباتی، حاصل عملیات در متغیری ذخیره شده و چاپ می شود. (سعی کنید خودتان کد را دنبال کنید و اگر سوالی داشتید در بخش نظرات بپرسید.)
نکتهی مهمی که در مورد عملگر شیفت وجود دارد این است که در شیفت به راست، در هر بار شیفت تمام بیت ها یک خانه(یک بیت) به سمت راست حرکت کرده و یک صفر از بیت پرارزش وارد میشود.
در شیفت به چپ هم عکس این روال صورت میگیرد، یعنی تمام بیت ها یک خانه به چپ شیفت پیدا کرده و یک صفر از بیت کم ارزش وارد میشود.
عملگر های مقایسهای
عملگرهای مقایسهای ارتباط بین عملوندها را مشخص میکنند. جدول زیر عملگرهای مقایسهای را که توسط زبان C پشتیبانی میشود، نشان میدهد. A را برابر با ۱۰ و B را برابر با ۲۰ فرض کنید:
عملگر های منطقی
عملگرهای منطقی بر روی عبارات منطقی عمل میکنند. عبارات منطقی دارای دو ارزش درستی و نادرستیاند و زمانی که باید یک شرط بررسی شود، استفاده می شوند.
در زبان C ارزش نادرستی با صفر و ارزش درستی با مقادیر غیر صفر مشخص میشود.
جدول زیر عملگرهای منطقی که توسط زبان برنامه نویسی C پشیبانی میشوند را نشان می دهد. A را یک و B را صفر فرض کنید:
- نتیجه عملگر && وقتی درست است که هر دو عملوند ارزش درستی داشته باشند.
- نتیجه عملگر || وقتی نادرست است که هر دو عملوند ارزش نادرستی داشته باشند.
مثال زیر را در نظر بگیرید:
int x,y ,m, p, q;
x = 0;
y = 1;
m = x && y;
p = x || y;
q = !x;
- در خط چهار m برابر با ارزش نادرستی خواهد بود؛ زیرا x دارای ارزش نادرستی و y دارای ارزش درستی است.
- در خط پنج p دارای ارزش درستی خواهد شد؛ زیرا x دارای ارزش نادرستی و y دارای ارزش درستی است و عملگر || روی آنها کار میکند و ارزش درستی را بر میگرداند.
- در خط شش چون x دارای ارزش نادرستی است، x! دارای ارزش درستی خواهد بود که نتیجه آن در q قرار میگیرد.
برای مطالعه بیشتر میتوانید مثال زیر را بررسی کنید. البته برای افرادی که با ساختارهای شرطی زبان C آشنایی کافی ندارند مطالعه مقاله ساختارهای شرطی توصیه می شود.
به مثال زیر دقت کنید:
#include <stdio.h>
main(){
int a = 21;
int b = 10;
int c;
if( a == b ){
printf("Line 1 - a is equal to b\n" );
}
else{
printf("Line 1 - a is not equal to b\n" );
}
if ( a < b ){
printf("Line 2 - a is less than b\n" );
}
else{
printf("Line 2 - a is not less than b\n" );
}
if ( a > b ){
printf("Line 3 - a is greater than b\n" );
}
else{
printf("Line 3 - a is not greater than b\n" );
}
/* Lets change value of a and b */
a = 5;
b = 20;
if ( a <= b ){
printf("Line 4 - a is either less than or equal to b\n" );
}
if ( b >= a ){
printf("Line 5 - b is either greater than or equal to a\n" );
}
}
پس از کامپایل و اجرای برنامه بالا نتایج زیر بدست میآید:
Line 1 - a is not equal to b
Line 2 - a is not less than b
Line 3 - a is greater than b
Line 4 - a is either less than or equal to b
Line 5 - b is either greater than or equal to a
- در این مثال دو مقدار با هم مقایسه شده و نتیجه مقایسه چاپ می شود. تفاوت عمده این مثال با مثال های قبلی وجود ساختار شرطی if و else است.
- در این ساختار اگه شرط if درست باشد دستورات مربوط به if اجرا شده، در غیر این صورت دستورات مربوط به else اجرا می شود.
- روال بسیار ساده و روان است. خودتان آن را دنبال کرده و در کامپایلر هم تست کنید. البته سعی کنید دستورات را نوشته و کپی نکنید. در نهایت اگر سوالی داشتید حتما در بخش نظرات مطرح کنید.
در این مورد به مثالی دیگر توجه کنید:
#include <stdio.h>
main(){
int a = 5;
int b = 20;
int c;
if ( a && b ){
printf("Line 1 - Condition is true\n" );
}
if ( a || b ){
printf("Line 2 - Condition is true\n" );
}
/* lets change the value of a and b */
a = 0;
b = 10;
if ( a && b ){
printf("Line 3 - Condition is true\n" );
}
else{
printf("Line 3 - Condition is not true\n" );
}
if ( !(a && b) ){
printf("Line 4 - Condition is true\n" );
}
}
پس از کامپایل و اجرای برنامه بالا ، نتایج زیر حاصل می شود:
Line 1 - Condition is true
Line 2 - Condition is true
Line 3 - Condition is not true
Line 4 - Condition is true
به دلیل تکراری بودن و ارائه توضیحات کافی در جدولها، مطالعه کدها به خواننده واگذار می شود. سوالات خود را در بخش نظرات مطرح کنید.
عملگر های انتساب مرکب
این عملگرها ترکیبی از عملگر مساوی و عملگرهای دیگر هستند. به طور مثال عملگر =+ در نظر بگیرید، اگر به شکل x += a نوشته شود، برابر با x = x+a است؛ یعنی هر بار متغیر x را با متغیر a جمع می کند و درون متغیر x قرار میدهد.
برای دیگر عملگرهای ترکیبی نیز به همین صورت است. در جدول زیر تمام عملگرهای انتساب مرکب که زبان C آن ها را پشتیبانی میکند نشان داده شدهاند:
مانند دیگر عملگرها مثالی کامل در نظر گرفته شده است. می توانید آن را مرور کنید.
به مثال زیر دقت کنید:
#include <stdio.h>
main(){
int a = 21;
int c;
c = a;
printf("Line 1 - = Operator Example, Value of c = %d\n", c );
c += a;
printf("Line 2 - += Operator Example, Value of c = %d\n", c );
c -= a;
printf("Line 3 - -= Operator Example, Value of c = %d\n", c );
c *= a;
printf("Line 4 - *= Operator Example, Value of c = %d\n", c );
c /= a;
printf("Line 5 - /= Operator Example, Value of c = %d\n", c );
c = 200;
c %= a;
printf("Line 6 - %= Operator Example, Value of c = %d\n", c );
c <<= 2;
printf("Line 7 - <<= Operator Example, Value of c = %d\n", c );
c >>= 2;
printf("Line 8 - >>= Operator Example, Value of c = %d\n", c );
c &= 2;
printf("Line 9 - &= Operator Example, Value of c = %d\n", c );
c ^= 2;
printf("Line 10 - ^= Operator Example, Value of c = %d\n", c );
c |= 2;
printf("Line 11 - |= Operator Example, Value of c = %d\n", c );
}
پس از کامپایل و اجرا شدن برنامه بالا نتایج زیر بدست میآید:
Line 1 - = Operator Example, Value of c = 21
Line 2 - += Operator Example, Value of c = 42
Line 3 - -= Operator Example, Value of c = 21
Line 4 - *= Operator Example, Value of c = 441
Line 5 - /= Operator Example, Value of c = 21
Line 6 - %= Operator Example, Value of c = 11
Line 7 - <<= Operator Example, Value of c = 44
Line 8 - >>= Operator Example, Value of c = 11
Line 9 - &= Operator Example, Value of c = 2
Line 10 - ^= Operator Example, Value of c = 0
Line 11 - |= Operator Example, Value of c = 2
به دلیل تکراری بودن و ارائه توضیحات کافی در جدول ها، مطالعه کدها به خواننده واگذار می شود. سوالات خود را در بخش نظرات مطرح کنید.
عملگر های خاص
در این بخش تعدادی از عملگرهای خاص را معرفی میکنیم. به این دلیل این عملگرها خاص هستند که نحوه استفاده آنها کمی تفاوت دارد.
عملگر ()
در یک معادله یا یک خط کد، اگر پرانتزهای مختلفی وجود داشته باشند، اولویت همیشه با داخلیترین پرانتز است.
y = (x + (a / (3 + g) )) * 2;
- ابتدا ۳ + g انجام میشود.
- در مرحله بعد (a/(3+g انجام میشود.
- سپس ((x+(a/(3+g انجام میشود.
- در انتها (x+(a/(3+g)))*2 انجام خواهد شد.
عملگر ,
اگر نیاز باشد در یک خط چند عمل انجام شود از عملگر کاما (,) استفاده میشود.
y = (x = 2, x * 7);
در رابطه بالا ابتدا متغیر x برابر با ۲ و بعد در ۷ ضرب میشود. سپس در متغیر Y قرار میگیرد.
عملگر ?
این عملگر یک انتساب شرطی است و نسبت به درست بودن یا نبودن یک شرط، از بین دو مقدار عمل انتساب را انجام میدهد. به این عملگر if فشرده هم میگویند.
نحوه تعریف آن بدین شکل است:
مقدار دوم : مقدار اول ? شرط مورد نظر = متغیر;
حال به مثال زیر توجه کنید:
- اگر مقدار متغیر x بزرگتر از ۵ باشد، متغیر x با ۲ جمع میشود و اگر مقدار متغیر x کوچکتر از ۵ باشد، با ۳ جمع میشود و در نهایت به y نسبت داده میشود.
- چون مقدار x برابر با ۶ است؛ بنابراین با ۲ جمع شده و در y قرار داده میشود.
عملگر ()sizeof
این عملگر طول یک متغیر یا نوع داده را برحسب بایت تعیین میکند. نحوه استفاده از این عملگر را در زیر مشاهده میکنید:
int x, y;
float m;
x = sizeof(y);
y = sizeof(m);
عملگر &
این عملگر که ampersand نام دارد، آدرس یک متغیر را بر میگرداند. مثلا a& آدرس متغیر a را میدهد. در بخش اشاره گرها از این عملگر استفاده کردیم.
عملگر *
این عملگر که asterisk نام دارد، هم در تعریف اشاره گر استفاده میشود و هم در به دست آوردن محتوای آدرسی که به آن اشاره میشود. (می توانید مقاله اشاره گرها را مطالعه کنید.)
در یک مثال کامل عملگرهای خاص را بررسی میکنیم. برای مطالعه بیشتر کلیک کنید.
به مثال زیر دقت کنید:
#include <stdio.h>
main(){
int a = 4;
short b;
double c;
int* ptr;
/* example of sizeof operator */
printf("Line 1 - Size of variable a = %d\n", sizeof(a) );
printf("Line 2 - Size of variable b = %d\n", sizeof(b) );
printf("Line 3 - Size of variable c= %d\n", sizeof(c) );
/* example of & and * operators */
ptr = &a;
/* 'ptr now contains the address of 'a */
printf("value of a is %d\n", a);
printf("*ptr is %d.\n", *ptr);
/* example of ternary operator */
a = 10;
b = (a == 1) ? 20: 30;
printf( "Value of b is %d\n", b );
b = (a == 10) ? 20: 30;
printf( "Value of b is %d\n", b );
}
پس از کامپایل و اجرای برنامه بالا ، نتایج زیر حاصل میشود
value of a is 4
*ptr is 4.
Value of b is 30
Value of b is 20
با توجه به توضیحات بالا سعی کنید درستی نتایج کد را ابتدا به صورت دستی و سپس به وسیله کامپایلر بررسی کنید.
تقدم کلی در عملگرها
تا به حال تقدم هر عملگر را در بین هم گروههای خودش مشاهده کردید. هر عملگر در بین کلیه عملگرها نیز دارای تقدم است. این تقدم را در جدول زیر میبینید:
به مثال زیر دقت کنید:
#include <stdio.h>
main(){
int a = 20;
int b = 10;
int c = 15;
int d = 5;
int e;
e = (a + b) * c / d; // ( 30 * 15 ) / 5
printf("Value of (a + b) * c / d is : %d\n", e );
e = ((a + b) * c) / d; // (30 * 15 ) / 5
printf("Value of ((a + b) * c) / d is : %d\n" , e );
e = (a + b) * (c / d); // (30) * (15/5)
printf("Value of (a + b) * (c / d) is : %d\n", e );
e = a + (b * c) / d; //20 + (150/5)
printf("Value of a + (b * c) / d is : %d\n" , e );
return 0;
}
پس از کامپایل و اجرای برنامه بالا ، نتایج زیر حاصل میشود:
Value of (a + b) * c / d is : 90
Value of ((a + b) * c) / d is : 90
Value of (a + b) * (c / d) is : 90
Value of a + (b * c) / d is : 50
سخن آخر
دوستان عزیز خدا قوت 🙂
جلسه “عملگر در زبان C” کمی نفس گیر بود چون خیلی مطلب لازم بود که توضیح بدیم و مسلط بودن به عملگرها خیلی از اشتباهات برنامه نویسی کم میکنه. فراموش نکنید که چندین بار مرور کنید و از نمونه برنامهها در محیط کدبلاکس تست بگیرید.
سوالات و اشکالات خودتون را همین زیر در بخش نظرات بپرسید تا بشون جواب بدیم. جلسه بعد در مورد ساختارهای شرطی میخوایم حرف بزنیم.
به عنوان آخرین حرف، یه پیشنهاد ویژه دارم برای اون دسته از دوستانی که علاقه دارند خیلی عمیقتر زبان C را یاد بگیرن و برای میکروکنترلرها یا کارهای نرم افزاری ازش استفاده کنند. دوره جامع زبان C را براتون تهیه کردم که فوق العاده پروژه محور و کاربردیه. خوش حال میشم در اون دوره شما رو ببینم. برای دسترسی به دوره میتونید روی عکس زیر کلیک کنید.
درباره احسان عبداللهی
مدیر و موسس میکرولرن | برنامه نویسی پاسخی ظریف به یک نیاز در دنیای واقعی هست.
نوشته های بیشتر از احسان عبداللهیمطالب زیر را حتما مطالعه کنید
دوره های آموزشی مرتبط
آموزش جنگو
آموزش پایتون
آموزش الگوریتم و فلوچارت – تفکر برنامه نویسی
آموزش برنامه نویسی C برای میکروکنترلر
آموزش الکترونیک دیجیتال
20 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
ممنون مطلب کاملی بود کار منو راه انداخت اشاله که موفق باشی.
درود بر شما دوست عزیز
سلام و خداقوت
ببخشید میشه درمورد کد زیر توضیح کوچیکی بدین؟
تو خط اول چرا از | استفاده شده؟ و ضرورت استفاده از عملگر & و | در خط دوم و سوم چیه؟ چرا مستقیما مقداردهی نشده؟ ممنون میشم اگر راهنماییم کنید.
DDRD |= (1<<۰);
PORTD &= (0<<۰);
PORTD |= (1<<۰);
سلام
دلیلش اینه که کد کوتاه تری بنویسم وگرنه مجبور بودیم هم چین کدی بنویسم:
DDRD = DDRD | (1<<۰)
سلام مجدد
خب میتونیم بصورت زیرهم بنویسیم که از لحاظ طول هم دچار مشکل نشیم
DDRD.0=1;
این کد با کد اول چه تفاوتی داره؟ من تست کردم برنامه کارخودشو مثل قبل انجام میده، ولی نتونستم دلیل اینکه بجای استفاده از کد بالا که نوشتم، چرا باید وارد استفاده از عملگر |و& بشیم؟؟
عملا در کدی که نوشتید خط دوم اضافه هست. ابتدا پورت را خروجی کرده و سپس مقدار یک روش نوشته.
این روش استاندارد زبان سی هست و کاملا هم روان و قابل فهم.
به شکلی که شما فرمودید فقط در کدویژن میشه کد نوشت و دقت کنید که این استاندارد زبان سی نیست بلکه فقط در این نرم افزار این کار را تعریف کردند.
من توصیه می کنم از کدویژن دیگه استفاده نکنید چون دیگه مثل سابق آپدیت های قوی براش ارائه نمیشه. هم چنین از سال ۲۰۱۴ دیگه کسی اون رو کرک نکرده. به جاش میتونید از Atmel studio استفاده کنید که فوق العاده قدرتمند هست. هم آپدیت های قوی داره و هم از طرف کمپانی میکروچیپ به شدت حمایت میشه. الان بیشتر افراد به استفاده از Atmel studio علاقه مند هستند.
اگه دوس داشتید میتونید از طریق دوره زیر میکروکنترلر AVR را به کمک Atmel studio آموزش ببینید:
https://microlearn.ir/product/avr-course
سلام . مرسی از آموزش های خوبتون دارم استفاده میکنم ازشون.
اولین مثال قبل از عملگرهای خاص – خط ۹ وقتی که ۱۱ با ۲ عمل AND بیتی انجام میده پاسخ باید صفر بیاد. چرا ۲ اومده؟
سلام. خواهش میکنم
۱۰۱۱ میشه یازده و ۰۰۱۰ میشه دو. اگه AND کنید نتیجه ۲ میشه.
میشه راجب اینکه کروم عملگر به سایرین اولویت داره هم توضیح بدین؟مثلن اینکه اول اند انجام میشه یا ایکس اور و …
با یک آزمایش ساده قابل انجام هست. از چپ به راست اولویت دارند. یک کد کوتاه بنویسید تا متوجه بشید
من اصلا برنامه نویسی بلد نیستم و خودم دارم با مطالعه مطالب مربوط به زبان c ++ یک چیزهایی یاد می گیریم
این صفحه را سرچ کردم و خیلی چیزها برام روشن شد
اما خیلی اشکال و سوال دارم.
واقعا آموزش خوبی بود
دمتون گرم واقعا” عالی بود
ممنون از زحماننون
چه جوری میشه تشخیص داد که ۰۰۱۱۱۱۰۰ میشه ۶۰؟
سلام به شما
این کار خیلی ساده هست. کافیه جایگاه اعداد از سمت راست را به ترتیب از ۰ تا ۷ در نظر بگیری. به این ترتیب اولین یک دارای ارزش ۲ هست.همین روال برای سایر یک ها وصفر ها وجود داره. حالا بیا و عدد هر خونه را(صفر یا یک) در ۲ به توان ارزشش ضرب کن. یعنی اولین یک در ۲ به توان ۲ ضرب میشه و الی آخر. حالا اعداد حاصل را باهم جمع کن. که میشه ۴+۸+۱۶+۳۲ و به ۶۰ میرسیم
عالیترین و کاملترین مقاله با این تاپیک بود که تا حالا دیدم. ممون از زحماتتون
نظر لطف شماست دوست عزیز
مهندس عزیز خسته نباشى خیلى ممنون عالى عالى پرچم بالاى بالاست
درود بر شما. حتما اگه سوالی دارید بپرسید تا پاسخ داده بشه