راکت
حل شده

محاسبه باینری

6 پاسخ

سلام.
توی یکی از صفحات کاربر میتونه چند تا روز هفته رو انتخاب کنه و با زدن دکمه سیو اون رو ذخیره کنه. دفعه بعد که کاربر میاد و صفحشو باز میکنه باید اون روزهایی که انتخاب کرده رو بهش نمایش بدیم..
مشکل من اینه که value برای روزهای هفته اعدادد باینری هست و برای فرستادن به سرور باید مجموع جمع باینریشونو بفرستیم. value برای روزهای هفته هست :

    SUNDAY: 0x0001,
        MONDAY: 0x0002,
        TUESDAY: 0x0004,
        WEDNESDAY: 0x0008,
        THURSDAY: 0x0010,
        FRIDAY: 0x0020,
        SATURDAY: 0x0040

حالا فرض کنید کاربر Sunday Friday Saturday رو انتخاب کنه. مجموع جمع باینریشون میشه 97 که اون رو میفرستیم سمت سرور. برای نمایش روزهای انتخاب شده برای بار بعد سرور 97 رو برمیگردونه.. حالا باید چه کنم که به سه تا عدد 0x0001 و 0x0020 و 0x0040 رسید تا روزهای Sunday Friday Saturday رسید ؟ ممنون میشم کمکم کنید.
@kamran.davar

ثبت پرسش جدید

پاسخ‌ها

6
Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

بهترین پاسخ

@milad یه راه ساده تر هم هست. تصادفا فهمیدم که مثلا 97 رو اگر با ولیو روزهای هفته and کنیم فقط وقتی مقدار اون بزرگتر از 0 هست که اون ولیو تشکیل دهنده جمعش باشه. و با این منطق و کد زیر مشکلم حل شد. و نیاز به هیچ تبدیلی هم نبود

  let weekDaysSum = props.selectedCampaignDetailData.weekDays
        let selectedWeekDays = [];
        let weekDaysTemp = [0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040]
        if (weekDaysSum && weekDaysSum > 0) {
            for (let index = 0; index < weekDaysTemp.length; index++) {
                //const element = array[index];
                if (weekDaysSum & weekDaysTemp[index]) {
                    selectedWeekDays.push(weekDaysTemp[index])
                }
            }
        }
        setWeekDays(selectedWeekDays)
میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

باینری به دستگاه اعداد دودویی میگن، در دستگاه اعداد دودویی تنها رقم های 0 و 1 رو داریم و اعداد مختلف رو با این ارقام بوجود میاریم.
این اعدادی که شما نوشتین دودویی نیستن.

الان شما چطوری محاسبه کردین که عدد 97 حاصل میشه؟

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

@milad
کافیه یه کنسول باز کنید و تست کنید
sum

شاید پاسخ شما همین‌جا باشد

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

این اعداد دو دویی نیستند، بلکه هگزادسیمال هستند، یعنی در مبنای 16 هستند.
شما ابتدا عدد 97 دریافتی رو به مبنای 16 می برید و حاصلش میشه: 0x0061

سپس دو رقم سمت راست رو کافیه تحلیل کنید:
رقم اول سمت راست:
1 --- > SUNDAY یکشنبه
2 ----> MONDAY دوشنبه
3 -----> یکشنبه و دوشنبه
4 -----> سه شنبه
5 -----> یکشنبه و سه شنبه
6 ------> دوشنبه و سه شنبه
7 ------> یکشنبه دوشنبه سه شنبه
8 ------> چهارشنبه
همینجوری 9 / a / b / c / d / e / f رو هم حساب می کنید.

رقم دوم رو هم باید محاسبه و تحلیل کنید.

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

البته مجدد بررسی کردم، دیدم راه ساده تری داره.
از همون ابتدا عدد حاصل جمع رو تبدیل به باینری کنید. در این مثال، 97 معادل دودویی ش میشه: 1100001
قاعده کلی: از سمت راست، معادل با ایام شما میشه: یکشنبه، دوشنبه، سه شنبه، چهارشنبه، پنجشنبه، جمعه، شنبه
از سمت راست این عدد دو دو یی، هر جا یک بودش، شامل اون روز میشه.
چون اعداد اول و ششم و هفتم رو شامل میشه، پس این روزها میشه: یکشنبه، جمعه، شنبه

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

تبدیل عدد ده دهی به دو دویی:

parseInt(97).toString(2) --- > "1100001"

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام