تجزیه کردن اعداد جمع شده

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
اگه ما چند متغییر داشته باشیم که با هم جمع شده باشن ، میتونیم بعد از جمع شدن ، از حاصل اش دوباره فهمید که چه عددهایی با هم جمع شدن تا اون حاصل بدست اومد؟
از عملگرهای بیتی نمیشه؟ اگه آره ، چجوری؟

------------------

در واقع من GWL_STYLE ویندوز (پنجره یا فرم) خودمو بدست آوردم و مقدار 348782592 که بصورت شونزده دهی میشه 14CA0000 رو گرفتم . حالا نمیدونم از جمع کدوم مقادیر در لینک زیر ، این عدد بدست اومد یا به عبارتی GWL_STYLE فرم من چه ویژگی هایی داره؟ :


https://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx
 
آخرین ویرایش:

the_king

مدیرکل انجمن
سلام
اگه ما چند متغییر داشته باشیم که با هم جمع شده باشن ، میتونیم بعد از جمع شدن ، از حاصل اش دوباره فهمید که چه عددهایی با هم جمع شدن تا اون حاصل بدست اومد؟
از عملگرهای بیتی نمیشه؟ اگه آره ، چجوری؟

------------------

در واقع من GWL_STYLE ویندوز (پنجره یا فرم) خودمو بدست آوردم و مقدار 348782592 که بصورت شونزده دهی میشه 14CA0000 رو گرفتم . حالا نمیدونم از جمع کدوم مقادیر در لینک زیر ، این عدد بدست اومد یا به عبارتی GWL_STYLE فرم من چه ویژگی هایی داره؟ :


https://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx
اولین نکته اینه که اینجور مقادیر که باهم ترکیب می شوند و به اصطلاح Flag هستند با هم OR می شوند، نه جمع. برای بررسی وجودشون هم بعضی از زبان ها توابعی مثل HasFlag یا Test دارند ولی در سایر موارد
باید از عملگر AND استفاده کنید.
باید یک لیستی یا آرایه ای از تمامی مقادیر شناخته شده رو داشته باشید و یکی یکی با اون مقدار AND کنید، مثلا [flags[i رو داخل حلقه i با اون مقدار مورد نظر AND کنید. اگر حاصل AND برابر [flags[i باشه اون ویژگی در مقدار هست، وگرنه نیست.

کد:
        private enum Styles : uint
        {
            WS_ACTIVECAPTION = 0x1,
            WS_BORDER = 0x800000,
            WS_CAPTION = 0xC00000,
            WS_CHILD = 0x40000000,
            WS_CLIPCHILDREN = 0x2000000,
            WS_CLIPSIBLINGS = 0x4000000,
            WS_DISABLED = 0x8000000,
            WS_DLGFRAME = 0x400000,
            WS_GROUP = 0x20000,
            WS_HSCROLL = 0x100000,
            WS_MAXIMIZE = 0x1000000,
            WS_MAXIMIZEBOX = 0x10000,
            WS_MINIMIZE = 0x20000000,
            WS_MINIMIZEBOX = 0x20000,
            WS_OVERLAPPED = 0x0,
            WS_POPUP = 0x80000000,
            WS_SYSMENU = 0x80000,
            WS_TABSTOP = 0x10000,
            WS_THICKFRAME = 0x40000,
            WS_VISIBLE = 0x10000000,
            WS_VSCROLL = 0x200000
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            uint value = 0x14CA0000;
            var flags = Enum.GetValues(typeof(Styles));
            var s = "";
            foreach (uint flag in flags)
            {
                if ((value & flag) == flag)
                {
                    // Your Code
                    s += ((Styles)flag).ToString() + " ";
                }
            }
            MessageBox.Show(s);
        }
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ممنون استاد علی
پس جواب رو هر بار با یکی از متغییرهای flag چک (and) کنم ، ببینم برابر بقیه ی مقادیر flag میشه یا نه . اگه هر کدوم شد ، اون توش هست دیگه
ممنون
 

جدیدترین ارسال ها

بالا