ورود

View Full Version : نحوه ارسال عدد 1- در تابعی که به صورت unsigned char تعریف شده؟



md3848
پنج شنبه 20 خرداد 1395, 16:39 عصر
سلام
من یه تابعی رو دیدم که به صورت زیر تعریف شده بود، تا جایی که میدونم unsigned char اعداد 0تا255 رو پشتیبانی میکنه - حالا چطور این تابع میاد و عدد 1- رو ارسال میکنه؟ البته اینو هم بگم که این تابع زیر رو در جای معتبری دیدم(در یکی از فایل های pdf شرکت atmel)
unsigned char USART_Receive( void )
{
return -1;
}

rahnema1
شنبه 22 خرداد 1395, 11:42 صبح
سلام
قاعده اش اینه که وقتی یک متغیر علامتدار می خواهد به متغیر بدون علامت تبدیل بشه در صورتی که اون عدد منفی باشه نحوه تبدیل به این صورته:
ما ابتدا بیشترین مقداری که در متغیر بدون علامت می تونه ذخیره بشه را در نظر می گیریم و با یک جمع می کنیم که در اینجا می شه ۲۵۶
سپس عدد منفی را با ۲۵۶ به صورت مکرر جمع یا منها می کنیم تا برسیم به یک عدد که مثبت باشه
مثلا ۱- را با ۲۵۶ جمع می کنیم که عدد 255 به دست میاد که قابل نمایش در unsigned char هست. حالا اگه عدد مورد نظر قابل نمایش نبود آنقدر جمع می کردیم تا به اولین عدد مثبت برسیم
پس 1- تبدیل می شه به 255

md3848
شنبه 22 خرداد 1395, 13:13 عصر
ممنون از شما
یعنی پس اینجا همون عدد 255 رو ارسال میکنه و اون 1- بیشتر یه فرم نمایشی برا خواناتر کردن برنامه بوده.

خب یه سوال اساسی : اینا رو از کجا گفتی؟ چرا باید محاسباتش این طوری باشه؟ اینی که گفتی جزو تعریفی های زبون c هستش یا یه چیز ریاضی هستش، نمیدونم سوالم رو متوجه بشی یا نه، ولی در کل منظورم اینه که سازنده زبون C اینطوری تعریف کرده که اگه عدد 1- رو خواستی به متغییر بدون علامت تبدیل کنی محاسبات این طوری میشه یا یه چیز ریاضی هستش که...

rahnema1
شنبه 22 خرداد 1395, 18:21 عصر
این مطالب در استاندارد زبان c صفحه 69 بند 6.3.1.3 اومده که pdf (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf) اون را می تونید دریافت کنید
در واقع یعنی باقیمانده تقسیم ۱- بر 256 یا
-1 mod 256

md3848
یک شنبه 23 خرداد 1395, 10:39 صبح
واقعا ممنونم از شما دوست عزیز.
یه موردی - این تفاوت زبان C و ++c - کتابی هستش که اینا رو توضیح داده باشه؟ یا باید حتما به هر دو زبان تسلط داشته باشم تا بتونم تمام تفاوت ها رو بدونم.؟

rahnema1
دوشنبه 24 خرداد 1395, 07:21 صبح
واقعا ممنونم از شما دوست عزیز.
یه موردی - این تفاوت زبان C و ++c - کتابی هستش که اینا رو توضیح داده باشه؟ یا باید حتما به هر دو زبان تسلط داشته باشم تا بتونم تمام تفاوت ها رو بدونم.؟

برای هر دو این زبانها استاندارد وجود داره. در واقع ++C تکمیل شده زبان c هست. تقریبا ۹۹ در صد چیزهایی که توی زبان c هست توی ++c هم هست و اون چیزهایی هم که نیست بهترش هست.
اگه می خواهید از جزئیات اینها مطلع بشید می تونید به استاندارد این دو زبان مراجعه کنید
لینک استاندارد زبان c را که توی پست بالا گذاشتم واسه ++C هم به سایت زیر مراجعه کنید
https://isocpp.org/std/the-standard