اطلاعیه

Collapse
No announcement yet.

آینه کردن مقدار یک متغیر

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

    آینه کردن مقدار یک متغیر

    سلام دوستان کسی میدونه چطور میشه مقدار یه متغیر رو آینه کرد؟

    مثلا این مقدار باینری متغیر ماست:
    101010010000
    و ما میخوایم بشه این:
    000010010101

    کمک کنید ممنون میشم.

    فرستاده شده از SM-A305Fِ من با Tapatalk

    #2
    پاسخ : آینه کردن مقدار یک متغیر

    داخل یه حلقه بیتها رو دونه دونه و به تعداد چرخش داخل حلقه به سمت راست شیفت بده،به زبان ساده تر بیت شانزدهم رو شانزده بار به راست،بیت پانزدهم رو چهارده بار، بیت سیزدهم رو یازده بار و همینطور ادامه بده،بایت بعدی رو به چپ شیفت بده طبق همین روال

    دیدگاه


      #3
      پاسخ : آینه کردن مقدار یک متغیر

      از دستور not برای تک تک بیت ها استفاده کن



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

      دیدگاه


        #4
        پاسخ : آینه کردن مقدار یک متغیر

        سلام
        با not کردن بیتها نمیشه.همانطور که دوستمان گفت از شیفت چرخشی استفاده کن یعنی بیتی که با شیفت خارج میشه از طرف دیگه وارد و جایگزین میشه . اگر نتونستی با یک حلقه for اندیس بیتها 15 تا کم یا زیاد کن متناسب با .....

        دیدگاه


          #5
          پاسخ : آینه کردن مقدار یک متغیر

          سلام عدد 0011 مگه داریم ؟ صفر های سمت چپ خونده نمیشه که میشه همون 11

          اما در کل من یه مثال میزنم برای آینه کردن، فرض کنید عدد مورد نظر شما A باشه A=1234 که خروجی بشه B=4321

          یه B تعریف کنید با مقدار اولیه صفر.سپس یه حلقه بی نهایت تعریف کنید که در شرایط خاصی که نوشتم ، از حلقه بیایم بیرون. من اومدن بیرون از حلقه رو با دستور برک break می نویسم :

          A=1234
          B=0
          i=0
          K=0
          G=0


          while 1
          {
          if A<10
          {
          B=B+A
          break
          }

          K=floor(A/10
          G=A-K*10
          A=K
          B=B+G*10^i
          i=i+1

          }

          دیدگاه


            #6
            پاسخ : آینه کردن مقدار یک متغیر

            نوشته اصلی توسط shart-band نمایش پست ها
            سلام عدد 0011 مگه داریم ؟ صفر های سمت چپ خونده نمیشه که میشه همون 11

            اما در کل من یه مثال میزنم برای آینه کردن، فرض کنید عدد مورد نظر شما A باشه A=1234 که خروجی بشه B=4321

            یه B تعریف کنید با مقدار اولیه صفر.سپس یه حلقه بی نهایت تعریف کنید که در شرایط خاصی که نوشتم ، از حلقه بیایم بیرون. من اومدن بیرون از حلقه رو با دستور برک break می نویسم :

            A=1234
            B=0
            i=0
            K=0
            G=0


            while 1
            {
            if A<10
            {
            B=B+A
            break
            }

            K=floor(A/10
            G=A-K*10
            A=K
            B=B+G*10^i
            i=i+1

            }
            با سلام.
            حرف شما درسته (البته من به الگویتمتون نگاه نکردم ولی با توجه به توضیحاتتون میشد فهمید که درسته.) اما با توجه به اینکه کاربری که سوال رو پرسیده احتمالا بر روی میکرو AVR کار میکنه این روش شما الگوریتم رو پیچیده میکنه چون دستورات ضرب و توان استفاده میکنید تعداد کلاک زیادی میکرو باید صرف انجام محاسبات بکنه .

            نوشته اصلی توسط Master81 نمایش پست ها
            سلام دوستان کسی میدونه چطور میشه مقدار یه متغیر رو آینه کرد؟
            نوشته اصلی توسط Master81 نمایش پست ها

            مثلا این مقدار باینری متغیر ماست:
            101010010000
            و ما میخوایم بشه این:
            000010010101

            کمک کنید ممنون میشم.

            فرستاده شده از SM-A305Fِ من با Tapatalk


            پس برای بهینه شدن کد بهتره همون طور که دوستان گفتند از شیفت چرخشی استفاده کنیدکه این کار رو میتونید با دستورات اسمبلی ROL برای شیفت چرخشی به چپ و ROR برای شیفت چرخشی به راست انجام بدید. که هر دو دستور اسمبلی گفته شده انجامشان یک کلاک طول میکشد . و هر دو انها بیت carry رو هم وارد چرخش میکنن.
            موفق باشید.

            دیدگاه


              #7
              پاسخ : آینه کردن مقدار یک متغیر

              برنامش کلا چهار خطه و چند سیکل زمان میبره،استفاده از ضرب و تقسیم برای متغیرهای چند بایتی زمان محاسبه رو چندین برابر افزایش میده که برای پردازش دیتاهای دریافتی و پشت هم گزینه مناسبی نیست،اگه به نتیجه نرسیدی بگو برنامه رو برات بنویسم

              دیدگاه


                #8
                پاسخ : آینه کردن مقدار یک متغیر

                نوشته اصلی توسط saati.sms نمایش پست ها
                با سلام.
                حرف شما درسته (البته من به الگویتمتون نگاه نکردم ولی با توجه به توضیحاتتون میشد فهمید که درسته.) اما با توجه به اینکه کاربری که سوال رو پرسیده احتمالا بر روی میکرو AVR کار میکنه این روش شما الگوریتم رو پیچیده میکنه چون دستورات ضرب و توان استفاده میکنید تعداد کلاک زیادی میکرو باید صرف انجام محاسبات بکنه .



                پس برای بهینه شدن کد بهتره همون طور که دوستان گفتند از شیفت چرخشی استفاده کنیدکه این کار رو میتونید با دستورات اسمبلی ROL برای شیفت چرخشی به چپ و ROR برای شیفت چرخشی به راست انجام بدید. که هر دو دستور اسمبلی گفته شده انجامشان یک کلاک طول میکشد . و هر دو انها بیت carry رو هم وارد چرخش میکنن.
                موفق باشید.
                تشکر از توجه شما ؛ دقیقا اگه مسئله در قالب ریزپردازنده و میکرو قراره حل بشه ، شیفت بهترین راه حله

                دیدگاه


                  #9
                  پاسخ : آینه کردن مقدار یک متغیر

                  نوشته اصلی توسط Master81 نمایش پست ها
                  سلام دوستان کسی میدونه چطور میشه مقدار یه متغیر رو آینه کرد؟

                  مثلا این مقدار باینری متغیر ماست:
                  101010010000
                  و ما میخوایم بشه این:
                  000010010101

                  کمک کنید ممنون میشم.

                  فرستاده شده از SM-A305Fِ من با Tapatalk
                  با سلام مجدد.
                  اگر نمیخواهید از دستورات شیفت استفاده کنید میتونید از کد زیر هم استفاده کنید:
                  #include <stdio.h> 


                  int main (void)
                  {
                  unsigned char i;
                  short int number = 0xAAAA;
                  short int temp = 0;
                  for ( i=0; i<=15; i++) {
                  if ((number & (1<<i)) != 0 ) {
                  temp |= (1<<(15-i));
                  }
                  }
                  printf("temp : %d", temp);
                  }




                  موفق باشید.

                  دیدگاه


                    #10
                    پاسخ : آینه کردن مقدار یک متغیر

                    ممنون از همه ی دوستان خیلی کمکم کرد؟

                    دیدگاه


                      #11
                      پاسخ : آینه کردن مقدار یک متغیر

                      نوشته اصلی توسط Master81 نمایش پست ها
                      سلام دوستان کسی میدونه چطور میشه مقدار یه متغیر رو آینه کرد؟

                      مثلا این مقدار باینری متغیر ماست:
                      101010010000
                      و ما میخوایم بشه این:
                      000010010101

                      کمک کنید ممنون میشم.

                      فرستاده شده از SM-A305Fِ من با Tapatalk

                      بفرما. این فک کنم بهینه تر از حلقه باشه:
                      کد:
                      [FONT="Yekan","Yekan","icons","Open Sans","sans-serif","Tahoma"]uint8_t bitflipper(uint8_t val) {
                       val = (val & 0xF0) >> 4 | (val & 0x0F) << 4;
                       val = (val & 0xCC) >> 2 | (val & 0x33) << 2;
                       val = (val & 0xAA) >> 1 | (val & 0x55) << 1;
                       return val;
                      }[/FONT]
                      Si vis pacem, para bellum

                      دیدگاه

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