ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

نمایش نتایج: از 1 به 7 از 7
  1. #1
    2011/08/04
    102
    4

    تعریف unsigned char به جای int

    با سلام به تمامی دوستان
    چرا در برنامه نویسی میکرو(کامپایلر Code Vision) متغیرهایی که مقدارشان صحیح است را معمولا unsigned char تعریف میکنند نه int.البته من خودم int تعریف میکردم اما زیاد دیدم که دیگران unsigned char تعریف میکنند.علتش رو نفهمیدم.مخصوصا اینکه مقدار صحیح چه ربطی به unsigned char داره.
    ممنون میشم راهنمایی ام کنید.
    با سپاس و درود بیکران  
    زیبا باش و بخند بر هرآنچه زشتی است،چرا که تنهاترین شان تو ،زیبایی است.
  2. #2
    2011/08/18
    مگه فضولي؟
    244
    1

    پاسخ : تعریف unsigned char به جای int

    با سلام
    در حالت عادی شما میتونید اعداد منفی رو هم به متغیرتون نسبت بدید
    مثلا در صورتی که متغیر char باشه محدوده ای بین 128- الی 127+ رو پوشش میده اما در صورتی که شما به نوع unsigned char تبدیلش کنید محدودش به 0 الی +255 تغییر پیدا میکنه.

    با سپاس
    نيست بر لوح دلم جز الف قامت دوست *** چه کنم حرف دگر ياد نداد استادم
  3. #3
    2008/06/01
    tehran
    79
    3

    پاسخ : تعريف unsigned char به جاي int

    با سلام
    يکي از دلايلش مي تونه اين باشه که unsignedchar هشت بيتيه ولي int شانزده بيت .
    يه جورايي مي شه گفت واسه صرفه جويي تو حافظه sram اين کار انجام مي شه.
  4. #4
    2010/04/09
    اسلامشهر
    1,494
    29

    پاسخ : تعریف unsigned char به جای int

    با سلام
    توی AVR 035 هجده نکته برای کاهش حجم کد بیان شده که یکی از موارد همینه ببینید :
    18 نکته برای کاهش حجم کد نهایی :

    1- عمل کامپایل در حالت full size optimization انجام شود.


    2- هر زمان که امکانش وجود داشت به جای استفاده از متغیر های سراسری از متغیر های محلی استفاده شود.

    3- همواره از کوچکترین متغیر متناسب با نوع کار مورد نظر استفاده و در صورت امکان بهتر است که بدون علامت(unsigned) تعریف شود .

    4- بهتر است اگر یک متغیر غیر محلی که تنها داخل یک تابع ارجاع داده شده است به صورت ایستا (static) تعریف گردد .

    5- در صورت امکان دادهای غیر محلی در قالب سختار تعریف شوند این امر امکان اینکه برای آدرس دهی غیر مستقیم اشاره گر به طور مجدد بارگزاری نشود افزایش می دهد .

    6- برای ایجاد حلقه های بی پایان از for( ; ; ) { } استفاده شود .

    7- در صورت امکان برای ایجاد حلقه از سختار do { } while(expression) استفاده شود .

    8- در صورت امکان از حلقه های پایین شمار و با فلگ پیش کاهشی(pre-decrement) استفاده شود.

    9- دسترسی مستقیم به رجیستر های I/O یا به عبارتی عدم استفاده از اشاره گر برای دسترسی به این رجیسترها

    10- اگر تابع main در هیچ کجای برنامه فراخوانی نشده بهتر است که با عنوان "C_task__" تعریف شود :

    __C_task void main(void)
    {

    11- استفاده از ماکروها بجای توابع برای انجام دستورات خاصی که کد اسمبلی معادلشان کمتر از 2 الی 3 خط میشود.

    12- کاهش حجم INTVEC (قسمتی از کد که فهرست بردار های وقفه و ریست را در خود برای استفاده از وقفه ها حفظ می کند مثلا برای مگا 16 که 4 بایت می باشد ) به اندازه مورد نیاز یا اینکه تمام قسمت های کد را یکی کرده تا کامپایلر به طور خودکار از فضای موجود به اندازه نیاز استفاده کند .

    13- کدهایی با قابلیت استفاده مجدد که در قالب ماژلار هستند. جمع آوری چندین تابع در یک ماژول یا به عبارتی در یک فایل و استفاده از آن در برنامه قابلت استفاده مجدد از کد را افزایش می دهند .

    14- برای دسترسی به حافظه داده از اشاره گر ها با یک مقدار آفست استفاده و یا ساختار هایی برای این امر تعریف شوند.

    15- در بعضی مواقع انجام عمل کامپایل در حالت "full speed optimization" منجر به تولید کدهای با حجم کمتر از حالت "full size optimization" میشود برای تشخیص این مسئله عمل کامپایل را بر روی یک ماژول بر مبنای یک ماژول خاص انجام میدهیم و نتیجه هر دو حالت از بهینه سازی را در مورد آن ماژول بررسی میکنیم تا بهترین حالت را برای انجام عمل کامپایل تعیین کنیم .

    16- در صورت امکان از فراخوانی توابع داخل روتین وفقه ها اجتناب شود .

    17- از کوچکترین مدل حافظه ممکن استفاده گردد .

    18- Optimize C_startup to not initialize unused segments (i.e., IDATA0 or IDATA1 if all
    variables are tiny or small).
  5. #5
    2011/08/04
    102
    4

    پاسخ : تعریف unsigned char به جای int

    [quote author=ساناز.پارســا link=topic=55815.msg299376#msg299376 date=1318359230]
    با سلام
    در حالت عادی شما میتونید اعداد منفی رو هم به متغیرتون نسبت بدید
    مثلا در صورتی که متغیر char باشه محدوده ای بین 128- الی 127+ رو پوشش میده اما در صورتی که شما به نوع unsigned char تبدیلش کنید محدودش به 0 الی +255 تغییر پیدا میکنه.

    با سپاس
    با سلام و سپاس از پاسختان
    اما منظور من اینه که چجوری متغیری که میخواهد مقداری صحیح را برگردونه،با unsigned char تعریف میشه؟مگه char برای تعریف انواع کاراکتر تعریف نشده؟پس چگونه مقادیر صحیح را برمیگردونه؟والا تا آنجا که من میدونم برای مقادیر صحیح باید از int استفاده کرد نه charممنون میشم راهنمایی ام کنید.
    زیبا باش و بخند بر هرآنچه زشتی است،چرا که تنهاترین شان تو ،زیبایی است.
  6. #6
    2011/07/13
    484
    4

    پاسخ : تعریف unsigned char به جای int

    با سلام
    ببین دوست عزیز شما وقتی یه متغیری رو از نوع unsigned char معرفی میکنی فضایی که این متغیر اشغال میکنه 8 بیته ،حالا این 8 بیتی که در اختیار داری رو میتونی تا عدد 255 پر کنی
    نقل قول نوشته اصلی توسط amir-ak
    با سپاس
    با سلام و سپاس از پاسختان
    اما منظور من اینه که چجوری متغیری که میخواهد مقداری صحیح را برگردونه،با unsigned char تعریف میشه؟مگه char برای تعریف انواع کاراکتر تعریف نشده؟پس چگونه مقادیر صحیح را برمیگردونه؟والا تا آنجا که من میدونم برای مقادیر صحیح باید از int استفاده کرد نه charممنون میشم راهنمایی ام کنید.
    کاراکتر چطوری ریخته میشه تو حافظه ؟خوب تبدیل به 0 و 1 میشه بعد تو حافظه ریخته میشه دیگه...
    درسته char بره کاراکتر استفاده میشه ولی خوب شما میتونی برای صرفه جویی در فضای حافظه ازش استفاده کنی (البته باید در نظر داشت که محدود هست)
    از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...
  7. #7
    2008/09/02
    اصفهان
    1,897
    37

    پاسخ : تعریف unsigned char به جای int

    البته از اونجایی که ممکنه بنا بر پارامتر های کامپایلر بشه یک char رو بصورت پیشفرض signed یا unsigned کرد اگر رنج عددی مهمه حتما عبارت signed یا unsigned قبل از آوردن نوع char قید بشه. یا اینکه از تایپهای تعریف شده ای مثل uint32_t یا int16_t استفاده بشه. چون این انواع علاوه بر اینکه علامت رو مشخص میکنن حجمشون هم کاملا مشخصه و ربطی به پلاتفرم نداره.

    دومین مسئله هم اینه که خیلی وقتها بهتره در محاسبات و مخصوصا مقایسه ها از نوع unsigned استفاده بشه. مثلا فرض کنیم میخوایین چک کنین که عددی از جنس signed int مقداری بین صفر تا 5 داشته باشه که معمولا این کد نوشته میشه:

    if((n >= 0) && (n <= 5))


    که میشه به فرم دیگه ای هم نوشته بشه که البته یه کمی ناخوانا هست:

    if((unsigned int)n <= 5)


    چون فرم unsigned یک عدد منفی بسیار بزرگتر از عدد 5 میشه.
نمایش نتایج: از 1 به 7 از 7

موضوعات مشابه

  1. متغییر char
    توسط cpld در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2015/11/26, 20:41
  2. تبدیل uint8_t به unsigned char در keil
    توسط isajan در انجمن پروسسورهای ARM
    پاسخ: 6
    آخرين نوشته: 2015/03/04, 11:08
  3. عدم تعریف متغییر unsigned long int در کد ویژن ورژن 2.05.3
    توسط ahmad2000 در انجمن میکروکنترلرهای AVR
    پاسخ: 4
    آخرين نوشته: 2013/09/07, 11:33
  4. تبدیل unsigned char به int
    توسط s699fx_bpr در انجمن NXP
    پاسخ: 4
    آخرين نوشته: 2012/02/10, 21:50
  5. volatile unsigned long
    توسط ieee7 در انجمن NXP
    پاسخ: 3
    آخرين نوشته: 2011/10/20, 03:20

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •