اطلاعیه

Collapse
No announcement yet.

تبدیل عدد اعشاری به باینری ؟؟؟

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

    تبدیل عدد اعشاری به باینری ؟؟؟

    سلام دوستان .. منی می خوام یه عدد اعشاری رو تبدیل کنم به باینری بعد تعدادی از رقم های باینری شده رو استخراج کنم .

    مثلا عددم 0.526849500125 هست .( من یه تابع دارم دقت خروجی اون زیاده ... ) . حالا فرض کنیم که باینری این عدد می شه

    0.01101010001010110011001010110100

    (البته همین تبدیل رو هم نمی دونم باید چه طور انجام بدم ) ...

    بعدشم می خوام تعدادی از این رقم های اعشاری رو استخراج کنم مثلا از اولی تا هشتمی که برای مثال بالا می شه 01101010

    کسی می دونه باید چیکار کنم ؟؟؟؟؟؟؟؟؟؟

    راستی یه سوال دیگه توی متلب چه طور دقت و میزان ارقام اعشاری رو مشخص می کنند ؟؟؟؟
    حداکثر دقتی که متلب داره چقدره ؟؟؟؟

    دوستان زیاد شد می دونم اما هر کدوم رو هم که جوابش رو می دونید ممنون می شم در اختیار من هم قرار بدید

    #2
    پاسخ : تبدیل عدد اعشاری به باینری ؟؟؟

    سلام. برای تبدیل از double به باینری و برعکس میتونید از این برنامه آماده استفاده کنید:
    دانلود
    لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
    لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
    با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
    اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
    يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

    دیدگاه


      #3
      پاسخ : تبدیل عدد اعشاری به باینری ؟؟؟

      نحوه ذخیره اعداد اعشاری در کامپیوتر از استاندارهای خاصی پیروی میکنه و ارقام باینری اون به تنهایی مشخص کننده دقت نیست (استاندارد IEEE754)
      شما اگه به همه قسمت اعشاری نیاز نداری تا اونجاییکه لازم داری رو بیار تو قسمت صحیح و بقیه رو حذف کن. اگه سوال و هدف از انجام کار واضح تر بود بیشتر میشد کمک کرد

      دیدگاه


        #4
        پاسخ : تبدیل عدد اعشاری به باینری ؟؟؟

        نوشته اصلی توسط mojalan
        نحوه ذخیره اعداد اعشاری در کامپیوتر از استاندارهای خاصی پیروی میکنه و ارقام باینری اون به تنهایی مشخص کننده دقت نیست (استاندارد IEEE754)
        شما اگه به همه قسمت اعشاری نیاز نداری تا اونجاییکه لازم داری رو بیار تو قسمت صحیح و بقیه رو حذف کن. اگه سوال و هدف از انجام کار واضح تر بود بیشتر میشد کمک کرد
        من دارم یه الگوریتم برای رمزنگاری می نویسم که هم باید به زبان C بنویسم و هم با متلب ....( فعلا روی متلب تمرکز کردم )

        من می خوام از حداکثر دقت کامپیوتر که 32 بیتی استفاده کنم .( فکر می کنم عدد ها باید از نوع double باشه دقیقا نمی دونم تا چند رقم اعشار رو ساپورت می کنه ).

        تمامی خروجی الگوریتمم هم بین 0 تا 1 هستش . مثل همین 0.526849500125

        دوباره با فرض اینکه باینری عدد بالا بشه 0.101001110101011011010 امکان داره که من بخوام از رقم 10 تا 18 بخوام جدا کنم حتما نخوام از رقم اولی شروع کنم برای استخراج ...

        یه چیزی مثلا عدد من 0.5 هستش . شما میگید من بیام عدد در 10 ضرب کنم که بشه 5 ...اما من نمی خوام این کار رو بکنم چون که باینری 0.5 میشه 0.1 و باینری 5 میشه 101

        دوستان اکر نظر دیگه ای دارند ممنون میشم در اختیارم قرار بدند

        اصلا یه چیز دیگه همون طور که شما گفتید اعداد توی کامپیوتر طبق استاندارد ieee754 ذخیره می شند . من با استفاده از تابع num2hex عددم رو طبق همین استاندارد به هگز یا به عبارت دیگه به باینری تبدیل می کنم .. خروجی این تابع یک رشته هستش مثلا
        کد:
        num2hex(0.000021458)
        
        ans =
        
        3ef6801688241db9

        طبق این استاندارد عدد اینطوری ذخیره می شه
        همون طور که معلومه 12 بیت بالا مربوط به sign و exponent هستش . من توی متلب چه طوری می تونم از اون 52 بیت مربوط به fraction مثلا 8 بیت اول رو بدست بیارم مثلا توی همین 3ef6801688241db9 عددای 3ef رو کنار بزارمو 68 رو (البته هگز) بدست بیارم .. همون طور که گفتم یه متغیر رشته ای هستش

        دیدگاه


          #5
          پاسخ : تبدیل عدد اعشاری به باینری ؟؟؟

          با سلام

          1- دابل double عددی 64 بیتی است و 15 رقم اعشار دقت دارد.
          2- لانگ دابل long ouble عددی 80 بیتی است و 19 رقم اعشار دقت دارد.
          3- چون بین 0و 1 قرار دارید : عدد مورد نظر را در 2 به توان 32 ضرب کنید. ( ارقام باینری شما ثابت می مانند مثل شیفت به چپ )
          4- یک عدد unsigned long int صحیح را برابر با آن عدد ضرب شده قرار دهید.

          5- حالا 32 بیت درست و درمان دارید.

          double dres=0.546654345;
          dres *= (double)0x100000000 ;
          unsigned long int ires = dres;

          ires عدد 32 بیتی مورد نظر شماست که هر بخش از آن را می توانید جداکرده و استفاده کنید.

          با سپاس
          گشتی در لاله زار
          http://www.eca.ir/forum2/index.php?topic=76138.0

          http://www.eca.ir/forum2/index.php?topic=76141

          دیدگاه


            #6
            پاسخ : تبدیل عدد اعشاری به باینری ؟؟؟

            نوشته اصلی توسط Solsal
            با سلام

            1- دابل double عددی 64 بیتی است و 15 رقم اعشار دقت دارد.
            2- لانگ دابل long ouble عددی 80 بیتی است و 19 رقم اعشار دقت دارد.
            3- چون بین 0و 1 قرار دارید : عدد مورد نظر را در 2 به توان 32 ضرب کنید. ( ارقام باینری شما ثابت می مانند مثل شیفت به چپ )
            4- یک عدد unsigned long int صحیح را برابر با آن عدد ضرب شده قرار دهید.

            5- حالا 32 بیت درست و درمان دارید.

            double dres=0.546654345;
            dres *= (double)0x100000000 ;
            unsigned long int ires = dres;

            ires عدد 32 بیتی مورد نظر شماست که هر بخش از آن را می توانید جداکرده و استفاده کنید.

            با سپاس
            ممنون مهندس ...
            فقط یه چیزی آیا متغیر double توی میکرو کنترلر arm هم مانند کامپیوتره یعنی از همون استاندارد استفاده می کنه ؟؟؟؟

            دیدگاه


              #7
              پاسخ : تبدیل عدد اعشاری به باینری ؟؟؟

              نوشته اصلی توسط ma-bah
              ممنون مهندس ...
              فقط یه چیزی آیا متغیر double توی میکرو کنترلر arm هم مانند کامپیوتره یعنی از همون استاندارد استفاده می کنه ؟؟؟؟
              با سلام

              keil

              Basic data types
              ARM Compiler toolchain v4.1 for µVision Compiler Reference

              Home > C and C++ Implementation Details > C and C++ implementation details > Basic data types

              Basic data types
              This section describes how the basic data types are implemented in ARM C and C++.

              Size and alignment of basic data types
              Table 31 gives the size and natural alignment of the basic data types.

              Table 31. Size and alignment of data types

              Type Size in bits Natural alignment in bytes
              char 8 1 (byte-aligned)
              short 16 2 (halfword-aligned)
              int 32 4 (word-aligned)
              long 32 4 (word-aligned)
              long long 64 8 (doubleword-aligned)
              float 32 4 (word-aligned)
              double 64 8 (doubleword-aligned)
              long double 64 8 (doubleword-aligned)

              All pointers 32 4 (word-aligned)
              bool (C++ only) 8 1 (byte-aligned)
              _Bool (C only[a]) 8 1 (byte-aligned)
              wchar_t (C++ only) 16 2 (halfword-aligned)
              [a] stdbool.h can be used to define the bool macro in C.


              گشتی در لاله زار
              http://www.eca.ir/forum2/index.php?topic=76138.0

              http://www.eca.ir/forum2/index.php?topic=76141

              دیدگاه


                #8
                پاسخ : تبدیل عدد اعشاری به باینری ؟؟؟

                سلام
                برنامه ای که یک عدد اعشاری مثلا 4.5 را به فرمت 32بیتی ذخیره در
                کامپیوتر و بر عکس
                اول برنامه دو گزینه باشه که انتخاب کنی عدد به چه فرمیه

                دیدگاه

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