اطلاعیه

Collapse
No announcement yet.

مشکل در تحلیل کد

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در تحلیل کد

    سلام دوستان نمیتونم کد زیر رو تحلیل کنم میشه بگید خروجی w چی میشه با تشکر
    کد:
    uint8_t a=0x2c;
    uint8_t *buf=a;
    uint16_t w = *buf++;
    w += (*buf++) << 8;
    سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

    #2
    پاسخ : مشکل در تحلیل کد

    الان میتونید؟

    uint8_t a=0x2c;
    uint8_t *buf=a;
    uint16_t w = a++;
    w = w + ((a++) << 8);
    جدیدترین ویرایش توسط voyager2020; ۱۷:۳۷ ۱۳۹۵/۰۸/۰۶.

    دیدگاه


      #3
      پاسخ : مشکل در تحلیل کد

      کاملا ساده هستش. جواب رو نمیگم. شما کجاش مشکل داری؟
      من توصیه میکنم از مثلا شبیه ساز اتمل استودیو استفاده کن و ببین نتیجه چی میشه و چه عملیاتی روش انجام میشه و مقدارش چقدر میشه. دارم بهت ماهی گیری یاد میدم.
      اگه می خوای نتیجه رو هم خودت بدست بیاری بر اساس اولویت عملگر ها(یه جدول دارند که اولویت ها رو توش نوشته) شروع به انجام عملیات روی مقدار مورد نظر کن به نتیجه میرسی.

      دیدگاه


        #4
        پاسخ : مشکل در تحلیل کد

        سلام
        به دسیمال تبدیل کردم بدونی
        اون 2 تا خط اخر خروجی هست جز برنامه نیست

        uint8_t a=44;

        uint8_t *buf=44;

        uint16_t w = 45;

        w = w + ((46) / 8);
        w=45+5;
        w=45+50=90;



        جدیدترین ویرایش توسط mahdi8866; ۱۹:۲۸ ۱۳۹۵/۰۸/۰۶.
        امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

        دیدگاه


          #5
          پاسخ : مشکل در تحلیل کد

          ممنون از پاسختون این کد نوشته شده برای یه جور مرتب سازی اما کلا عدد تغییر میده اولویت عملگرها رو بلدم درباره پوینترها هم میدونم اما نمیتونم رابطه شو با این کلمه روبرو بفهمم
          little-endian


          باتشکر از دوستان
          جدیدترین ویرایش توسط سید سجاد احدزاده; ۱۹:۵۵ ۱۳۹۵/۰۸/۰۶.
          سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

          دیدگاه


            #6
            پاسخ : مشکل در تحلیل کد

            سلام
            چه رابطه ای رو بفهمید؟
            داره میگه در یه متغیر32 بیتی کم ارزشترین بایت رو در اولین ادرس حافظه میریزه دیگه
            امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

            دیدگاه


              #7
              پاسخ : مشکل در تحلیل کد

              ممنون داداش من یه چیز نفهمیدم چرا به صورت دستی حساب میکنم یه عدد دیگه میاد اما با شبیه ساز تربو c تست میکنم همینی که الان گفتین (متغییر 16 بیتی) انتقال میده نمایش میده
              خروجی تو تربوc :
              2c00 هست اما به صورت دستی حساب میکنی 5a میاد؟
              سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

              دیدگاه


                #8
                پاسخ : مشکل در تحلیل کد

                توربو سی با ویژال استودیو در مورادی متفاوته
                در cast کردن این موارد پیش میاد با ویژال بنویسید ببینید همین نتیجه رو میگیرید

                دیدگاه


                  #9
                  پاسخ : مشکل در تحلیل کد

                  نوشته اصلی توسط سید سجاد احدزاده نمایش پست ها
                  ممنون داداش من یه چیز نفهمیدم چرا به صورت دستی حساب میکنم یه عدد دیگه میاد اما با شبیه ساز تربو c تست میکنم همینی که الان گفتین (متغییر 16 بیتی) انتقال میده نمایش میده
                  خروجی تو تربوc :
                  2c00 هست اما به صورت دستی حساب میکنی 5a میاد؟
                  سلام من با ویژ<ال استدیو کار کردم اما با توربو نه
                  امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

                  دیدگاه


                    #10
                    پاسخ : مشکل در تحلیل کد
                    • یافتم اولا a باید به صورت ارایه تعریف بشه بعدشم دستور
                      کد:
                      *buf++;
                      مقدار buf افزایش نمیده چون یه پوینتر و داخل پوینتر یه ادرس قرار میگیره و مقدار ادرس یه واحد افزایش میده و بعد از افزایش buf به متغییر قرار گرفته در ادرس بعدی اشاره میکنه
                      مثلا:
                      کد:
                      uint8_t a[]={0x5c,0x6c};
                      uint8_t *buf=&a[0];
                          uint16_t w = *buf++;
                          w+= (*buf++)<<8;
                      خروجی میشه همون little-endian :
                      کد:
                      6c5c
                      با تشکر از دوستان
                    سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

                    دیدگاه

                    لطفا صبر کنید...
                    X