Parastoo Ebrahimi
4 سال پیش توسط Parastoo Ebrahimi مطرح شد
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


ثبت پرسش جدید
Parastoo Ebrahimi
تخصص : front-end developer
@parastooebrahimi 4 سال پیش مطرح شد
0

@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)

میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 4 سال پیش آپدیت شد
1

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

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


Parastoo Ebrahimi
تخصص : front-end developer
@parastooebrahimi 4 سال پیش مطرح شد
0

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


میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 4 سال پیش مطرح شد
1

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

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

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


میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 4 سال پیش مطرح شد
0

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


میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 4 سال پیش مطرح شد
0

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

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

Parastoo Ebrahimi
تخصص : front-end developer
@parastooebrahimi 4 سال پیش مطرح شد
0

@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)

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

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