Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Битовые поля в PHP / 25 сообщений из 36, страница 1 из 2
11.06.2013, 16:48
    #38294399
nop
nop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
В PHP я новичёк и нагуглить по этой теме ничего не смог. Изначально у меня есть набор цифр известного максимального размера (в битах), которые нужно упаковать в 4 байта (dword). В С++ это было проще простого, за счёт возможности создания структур с битовыми полями. Например:
typedef struct {
unsigned int a: 4;
unsigned int b: 16;
unsigned int c: 4;
unsigned int d: 2;
unsigned int e: 6;
} myDwordVariable;
В итоге имею прямой доступ к каждому полю без всяких там математических операторов. В PHP я такого не нашёл :(
Подскажите пожалуйста наиболее удобный для моих целей вариант.
...
Рейтинг: 0 / 0
11.06.2013, 17:11
    #38294450
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
авторабор цифр известного максимального размера (в битах),
что что есть?
...
Рейтинг: 0 / 0
11.06.2013, 19:03
    #38294576
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
nopВ PHP я новичёк и нагуглить по этой теме ничего не смог. Изначально у меня есть набор цифр известного максимального размера (в битах), которые нужно упаковать в 4 байта (dword). В С++ это было проще простого, за счёт возможности создания структур с битовыми полями. Например:
typedef struct {
unsigned int a: 4;
unsigned int b: 16;
unsigned int c: 4;
unsigned int d: 2;
unsigned int e: 6;
} myDwordVariable;
В итоге имею прямой доступ к каждому полю без всяких там математических операторов. В PHP я такого не нашёл :(
Подскажите пожалуйста наиболее удобный для моих целей вариант.

мне этот факт стал интересен, спасибо, не знал что такое бывает. НО... Для чего Вам это... тем более в php? просто интересно :)
...
Рейтинг: 0 / 0
11.06.2013, 20:34
    #38294638
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
nopВ PHP я новичёк и нагуглить по этой теме ничего не смог. Изначально у меня есть набор цифр известного максимального размера (в битах), которые нужно упаковать в 4 байта (dword). В С++ это было проще простого, за счёт возможности создания структур с битовыми полями. Например:
typedef struct {
unsigned int a: 4;
unsigned int b: 16;
unsigned int c: 4;
unsigned int d: 2;
unsigned int e: 6;
} myDwordVariable;
В итоге имею прямой доступ к каждому полю без всяких там математических операторов. В PHP я такого не нашёл :(
Подскажите пожалуйста наиболее удобный для моих целей вариант.

математические преобразования есть всегда. комьютер не понимает бита, сам проц вообщемто и байта не понимает. просто ты не делал этих операций.

в пхп нету. вишь пхп гуру даже не знают что это такое.

изобретай свой код... побитовые операции и битовый сдвиг есть. :)
...
Рейтинг: 0 / 0
11.06.2013, 21:52
    #38294694
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
alex564657498765453nopВ PHP я новичёк и нагуглить по этой теме ничего не смог. Изначально у меня есть набор цифр известного максимального размера (в битах), которые нужно упаковать в 4 байта (dword). В С++ это было проще простого, за счёт возможности создания структур с битовыми полями. Например:
typedef struct {
unsigned int a: 4;
unsigned int b: 16;
unsigned int c: 4;
unsigned int d: 2;
unsigned int e: 6;
} myDwordVariable;
В итоге имею прямой доступ к каждому полю без всяких там математических операторов. В PHP я такого не нашёл :(
Подскажите пожалуйста наиболее удобный для моих целей вариант.

математические преобразования есть всегда. комьютер не понимает бита, сам проц вообщемто и байта не понимает. просто ты не делал этих операций.

в пхп нету. вишь пхп гуру даже не знают что это такое.

изобретай свой код... побитовые операции и битовый сдвиг есть. :)

Ну, это то да. Но учитывая, что такая структура хранения данных сказывается на производительности, думаю является логичным отсутствие данной возможности в php. Серверные технологии рассчитаны на большие нагрузки, а значит наклон идёт на увеличение производительности.

По-этому я и спросил, я зачем это может потребоваться на php? Сервера не страдают от недостатка оперативки обычно, а значит и экономить, и вместо 16 бит тиснуться в 14 нету смысла :)
...
Рейтинг: 0 / 0
12.06.2013, 00:37
    #38294783
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
Програмёрalex564657498765453пропущено...


математические преобразования есть всегда. комьютер не понимает бита, сам проц вообщемто и байта не понимает. просто ты не делал этих операций.

в пхп нету. вишь пхп гуру даже не знают что это такое.

изобретай свой код... побитовые операции и битовый сдвиг есть. :)

Ну, это то да. Но учитывая, что такая структура хранения данных сказывается на производительности, думаю является логичным отсутствие данной возможности в php. Серверные технологии рассчитаны на большие нагрузки, а значит наклон идёт на увеличение производительности.

По-этому я и спросил, я зачем это может потребоваться на php? Сервера не страдают от недостатка оперативки обычно, а значит и экономить, и вместо 16 бит тиснуться в 14 нету смысла :)

ерунду написал. и нащот памяти, и нащот производительности.
нащот памяти - а сегодня все компьютеры не страдают нехваткой оперативки чтоб два бита экономить.
там где язык интерпретируемый, уже вопрос о производительности кода не стоит.
...
Рейтинг: 0 / 0
12.06.2013, 00:43
    #38294790
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
nopВ PHP я новичёк и нагуглить по этой теме ничего не смог. Изначально у меня есть набор цифр известного максимального размера (в битах), которые нужно упаковать в 4 байта (dword). В С++ это было проще простого, за счёт возможности создания структур с битовыми полями. Например:
typedef struct {
unsigned int a: 4;
unsigned int b: 16;
unsigned int c: 4;
unsigned int d: 2;
unsigned int e: 6;
} myDwordVariable;
В итоге имею прямой доступ к каждому полю без всяких там математических операторов. В PHP я такого не нашёл :(
Подскажите пожалуйста наиболее удобный для моих целей вариант.

кстате учти ж. в пхп один целочисленый тип - интежер. а он может быть и 64 бита, и на сервере скорей всего так и есть. :)
так что будешь баловаться таким образом - обязательно надо чтоб код определял разрядность микропроцессора. Но в пхп ини можно задавать разрядность интеджера.

Так что лучше всего определять по типу

если 0xFF+1 < 0xFF - 8bit
tckb 0xFFFF+1 < 0xFFFF - 16bit
etc
...
Рейтинг: 0 / 0
12.06.2013, 00:56
    #38294796
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
alex564657498765453,

Интерпретация кода, вместо компиляции - это уже другое. Это политика openSource. Помню раньше читал, что собрались классные и умные человечки, и решили, что весь вэб будет на открытых кодах, что бы его было легко править, что бы он был передаваем (так как мало компаний пишут сайт и поддерживают его до последнего, а тем более частники). Но потом пришёл дядя Билл и сказал (как всегда впрочем) "да ну нафиг ваш стандарт" (эм... ну не так конечно, но смысл именно такой). И внедрил в вэб свою платформу ASP.NET, которая является компилируемой. Быстродейственной, но менее удобной для редактирования (не в плане кода, а в плане подготовки к редактированию и требующей установки платного продукта) и неперносимой на некоторые системы (ну или сложно переносимой... логично, ведь компилируемся :) )

Вот так. Так что интерпретация кода вместо его компиляции - это другой вопрос, обусловленный другими аспектами. Вынужденная потеря скорости. В плане же ресурсоёмкости и производительности, уклон делается на производительность, так как винчестера, оперативки у серверов сейчас "ё-маё" :)

P.S. не в обиду тем, кто пишет на .NET, сейчас это тоже уже стандарт многими уважаем. Просто вот так всё было (по тем данным, которые попадались мне). Привёл в пример NET только для того, что бы показать обоснованность принятия решения интерпретации кода на сервере.
...
Рейтинг: 0 / 0
12.06.2013, 01:34
    #38294813
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
авторASP.NET, которая является компилируемой.
Эм? а дядя билл про это знает?
...
Рейтинг: 0 / 0
12.06.2013, 01:42
    #38294817
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
ScareCrowавторASP.NET, которая является компилируемой.
Эм? а дядя билл про это знает?

думаю знает тынц
...
Рейтинг: 0 / 0
12.06.2013, 01:48
    #38294822
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
и вы там ТОЧНО дальше первой строчки читали?
...
Рейтинг: 0 / 0
12.06.2013, 01:52
    #38294825
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
ScareCrow,

да, конечно читал. Объясните пожалуйста что не так говорю (исходя из данных в данной статье)...
...
Рейтинг: 0 / 0
12.06.2013, 01:56
    #38294828
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
тогда расскажите как у меня без всякой компиляции в DLL работает сайт?
вот напрмер код главной:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using DungeonMaster.BLL;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Threading;
using jabber.client;
using System.Xml;
using System.Xml.XPath;
using System.Net;

public partial class MasterPage : System.Web.UI.MasterPage
{
    static ManualResetEvent mdone = new ManualResetEvent(false);

    protected void Page_Load(object sender, EventArgs e)
    {
        Environment.CurrentDirectory = MapPath("~/App_Files");

        this.Page.Title = this.Page.Title + " | DUNGEONMASTER.RU";

        litModules.Text = Module.GetModuleCount().ToString();
        litModulesInc.Text = "+" + Module.GetNewModuleCount(DateTime.Today).ToString();

        litChars.Text = Player.GetPlayerCount().ToString();
        litCharsInc.Text = "+" + Player.GetNewPlayerCount(DateTime.Today).ToString();

        litPlayers.Text = Cabinet.CountUsers(false).ToString();
        int count = Cabinet.CountUsers(true);

        litPlayersInc.Text = "+" + count.ToString();

        if (this.Page.User.Identity.IsAuthenticated)
        {
            MembershipUser user = Membership.GetUser(this.Page.User.Identity.Name);

            if (user != null)
            {
                // разбаниваем, если пора
                List<Ban> bans = Ban.GetBansByUserName(this.Page.User.Identity.Name, true);

                // если юзер в бане, а действующих банов нет, снимаем все баны
                if ((bans.Count == 0) && ((user.IsLockedOut) || (this.Profile.GetProfile(this.Page.User.Identity.Name).Preferences.isBannedOnForum)))
                {
                    ProfileCommon profile = this.Profile.GetProfile(this.Page.User.Identity.Name);
                    profile.Preferences.isBannedOnForum = false;
                    profile.Save();
                    bool banRet = DungeonMaster.BLL.User.UnBanUser(this.Page.User.Identity.Name);
                    if (user.IsLockedOut)
                        user.UnlockUser();
                    Membership.UpdateUser(user);
                }

                if (user.IsLockedOut)
                {
                    FormsAuthentication.SignOut();
                    this.Page.Response.Redirect("~/Default.aspx");
                }
                else
                {
                    try
                    {
                        HyperLink lnkCabinet = (HyperLink)LoginView3.FindControl("lnkCabinet");
                        lnkCabinet.NavigateUrl = "~/Cabinet/?user=" + this.Page.User.Identity.Name;
                        Literal litUnseenMessages = (Literal)LoginView3.FindControl("litUnseenMessages");
                        litUnseenMessages.Text = PrivateMessage.CountUnseenMessages(this.Page.User.Identity.Name).ToString();
                        if (litUnseenMessages.Text != "0")
                        {
                            lnkCabinet.Style.Add("font-weight", "bold");
                            lnkCabinet.Style.Add("color", "#696");
                        }
                        ProfileCommon profile = Profile.GetProfile(this.Page.User.Identity.Name);
                        if ((!string.IsNullOrEmpty(Request.ServerVariables["HTTP_X_FORWARDED_FOR"])) && (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != "127.0.0.1"))
                        {
                            profile.Preferences.IP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                        }
                        else
                        {
                            profile.Preferences.IP = Request.ServerVariables["REMOTE_ADDR"];
                        }

                        // поработаем с куки

                        if (Request.Cookies["userName"] != null)
                        {
                            HttpCookie aCookie = Request.Cookies["userName"];

                            string[] userNames = null;
                            userNames = profile.Preferences.cookieUsers.Split(';');

                            if (!userNames.Contains(aCookie.Value))
                            {
                                //удаляем старый куки

                                aCookie.Expires = DateTime.Now.AddDays(-1);
                                Response.Cookies.Add(aCookie);

                                // добавляем новое значение в профиль

                                profile.Preferences.cookieUsers += aCookie.Value + ";";
                            }
                        }
                        else
                        {
                            Response.Cookies["userName"].Value = this.Page.User.Identity.Name;
                            Response.Cookies["userName"].Expires = DateTime.Now.AddDays(999);
                        }

                        profile.Save();
                    }
                    catch (Exception exc)
                    {
                    }
                }
            }
            else
            {
                FormsAuthentication.SignOut();
            }
        }

        if (this.Request.Path.Contains("/Forum"))
        {
            lnkForum.Enabled = false;
            lnkForum.ForeColor = System.Drawing.ColorTranslator.FromHtml("#333333");
        }
        if (this.Request.Path.Contains("/Chat/"))
        {
            lnkChat.Enabled = false;
            lnkChat.ForeColor = System.Drawing.ColorTranslator.FromHtml("#333333");
        }
        if (this.Request.Path.Contains("/Search"))
        {
            lnkSearch.Enabled = false;
            lnkSearch.ForeColor = System.Drawing.ColorTranslator.FromHtml("#333333");
        }
        if (this.Request.Path.Contains("/News"))
        {
            lnkNews.Enabled = false;
            lnkNews.ForeColor = System.Drawing.ColorTranslator.FromHtml("#333333");
        }
        if (this.Request.Path.Contains("/Faq"))
        {
            lnkFaq.Enabled = false;
            lnkFaq.ForeColor = System.Drawing.ColorTranslator.FromHtml("#333333");
        }
        if (this.Request.Path.Contains("/Community"))
        {
            lnkCommunity.Enabled = false;
            lnkCommunity.ForeColor = System.Drawing.ColorTranslator.FromHtml("#333333");
        }
        if (this.Request.Path.Contains("/About"))
        {
            lnkAbout.Enabled = false;
            lnkAbout.ForeColor = System.Drawing.ColorTranslator.FromHtml("#333333");
        }

        if ((this.Page.User.IsInRole("Старший гоблин")) || (this.Page.User.IsInRole("Младший гоблин")))
        {
            lnkAdmin.Visible = true;

            if (this.Request.Path.Contains("/Admin"))
            {
                lnkAdmin.Enabled = false;
                lnkAdmin.ForeColor = System.Drawing.ColorTranslator.FromHtml("#333333");
            }
        }

        if ((this.Request.Path == "/default.aspx")||(this.Request.Path == "/Default.aspx"))
        {
            lnkMain.Enabled = false;
            lnkMain.ForeColor = System.Drawing.ColorTranslator.FromHtml("#333333");
        }

        if (this.Page.User.Identity.IsAuthenticated)
        {
            /*ProfileCommon profile = Profile.GetProfile(this.Page.User.Identity.Name);
            profile.Preferences.LastActivityDate = DateTime.Now;
            profile.Save();*/
            DungeonMaster.BLL.User.UpdateUserOnLine(this.Page.User.Identity.Name);
        }
        
        if (!IsPostBack)
        {
            Random rnd = new Random(DateTime.Now.Millisecond);
            if (rnd.Next(0, 4) == 1) // кому повезет...
            //if (true)
            {
                List<BotMessage> botMessages = BotMessage.GetBotMessagesByType(1);
                // если есть что слать и последнее не создано за последние 2 мин
                if (botMessages.Count > 0)
                {
                    try
                    {
                        //ICQLogin();
                        JabberClient jclient = new JabberClient();
                        jclient.User = "dm-bot";
                        jclient.Server = "jabber.ru";
                        //jclient.Server = "qip.ru";
                        jclient.Password = "2oo32OO4";
                        jclient.RequiresSASL = false;
                        jclient.SSL = false;
                        jclient.AutoStartTLS = false;
                        jclient.RequiresSASL = false;
                        bedrock.net.AsyncSocket.UntrustedRootOK = true;

                        //jclient.LocalCertificate.

                        //jclient.Port = 443;
                        jclient.AutoRoster = false;
                        jclient.AutoPresence = false;
                        jclient.AutoReconnect = -1;

                        jclient.OnError += new bedrock.ExceptionHandler(j_OnError);

                        jclient.OnAuthenticate += new bedrock.ObjectHandler(jclient_OnAuthenticate);
                        jclient.OnConnect += new jabber.connection.StanzaStreamHandler(jclient_OnConnect);
                        jclient.OnAuthError += new jabber.protocol.ProtocolHandler(jclient_OnAuthError);

                        jclient.Connect();

                        if (true)
                        {
                            jclient.OnReadText += new bedrock.TextHandler(j_OnReadText);
                            jclient.OnWriteText += new bedrock.TextHandler(j_OnWriteText);
                        }


                        mdone.WaitOne();

                        // logout cleanly
                        jclient.Close();
                    }
                    catch
                    { }
                }               
            }
        }
    }

    protected void btnLogOut_Click(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
    }
   
    static void j_OnWriteText(object sender, string txt)
    {
        if (txt == " ") return;  // ignore keep-alive spaces
        //Console.WriteLine("SEND: " + txt);
    }

    static void j_OnReadText(object sender, string txt)
    {
        if (txt == " ") return;  // ignore keep-alive spaces
        //Console.WriteLine("RECV: " + txt);
    }


    void jclient_OnAuthError(object sender, System.Xml.XmlElement rp)
    {
        //throw new NotImplementedException();
    }

    void jclient_OnConnect(object sender, jabber.connection.StanzaStream stream)
    {
        //throw new NotImplementedException();
    }

    static void jclient_OnAuthenticate(object sender)
    {
        // Sender is always the JabberClient.
        JabberClient j = (JabberClient)sender;

        List<BotMessage> botMessages = BotMessage.GetBotMessagesByType(1);

        foreach (BotMessage msg in botMessages)
        {
            try
            {
                j.Message(msg.UIN, msg.Message);
                bool done = BotMessage.UpdateBotMessage(msg.Id, DateTime.Now);
            }
            catch (Exception ex)
            {
                if (msg.UIN.Length == 0)
                    BotMessage.UpdateBotMessage(msg.Id, DateTime.Now);
            }
        }
        

        //j.Message("yposadskiy@unact.ru", "test");

        // Finished sending.  Shut down.
        mdone.Set();
    }

    static void j_OnError(object sender, Exception ex)
    {
        // There was an error!
        //Console.WriteLine("Error: " + ex.ToString());

        // Shut down.
        mdone.Set();
    }
}

...
Рейтинг: 0 / 0
12.06.2013, 01:57
    #38294830
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
вот прям так и работает, из текстовика, как PHP
...
Рейтинг: 0 / 0
12.06.2013, 02:01
    #38294832
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
ScareCrowвот прям так и работает, из текстовика, как PHP

А Вы после изменения 1 буковки кода попробуйте зайти на сайт. Первый заход будет занимать больше времени, чем последующие. Это и будет компиляция кода сайта.

Просто там код компилируется не программистом вручную, а автоматом при первом запуске.
...
Рейтинг: 0 / 0
12.06.2013, 02:04
    #38294833
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
Кстати, процедуру первого запуска видел лично, так как на смену мне в компанию, где я работал, пригласили программиста на NET платформу (хотели на php продолжить, но он реально классно шарит, по-этому решили с ним попробовать). Так вот, он мне лично показывал как это всё работает и объяснял, почему так долго запускается первый раз.
...
Рейтинг: 0 / 0
12.06.2013, 02:09
    #38294836
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
так, с открытыми кодами разобрались. оказывается в самом что ни на есть пропиетарном Микрософте самые что ни на есть открыты коды. с компиляцией сами почитаете или тоже разберем?
...
Рейтинг: 0 / 0
12.06.2013, 02:27
    #38294841
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
ScareCrow,

К сожалению уже с телефона, потому пока отвечать не буду на прошлое сообщение, так как сложно аргументировать не давая ссылок нормальных. А вот по поводу компиляции, с радостью почитал бы Ваши доводы (по формулировке понимаю, что хотите поспорить)
...
Рейтинг: 0 / 0
12.06.2013, 02:31
    #38294842
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
быстро ты слился
...
Рейтинг: 0 / 0
12.06.2013, 02:39
    #38294845
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
ScareCrow,

Ну так ответь. Я то утром аргументы то подкачу свои. Не знаю как там у Вас, а тут в Москве 2.40 однако :). С чего мне ещё в такое время как не с телефона сидеть? Выпучив глаза перед компом? Нее. Явно не для меня.
...
Рейтинг: 0 / 0
12.06.2013, 08:17
    #38294867
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
ScareCrowтак, с открытыми кодами разобрались. оказывается в самом что ни на есть пропиетарном Микрософте самые что ни на есть открыты коды. с компиляцией сами почитаете или тоже разберем?

Итак, с открытыми кодами и компиляцией... Надеюсь английский знаем... Итак, ссылки:
общие положения публикации сайтов на asp.net
возможные варианты публикации сайтов на asp.net
не просто откуда-то, а с оригинального сайта msdn.microsoft.com. Так Вот, давайте обсудим официальные ссылки, документации к продукту... а то "у меня" - это не дело... ))) Вы могли просто сайт публиковать вместе с кодами (читаем... там есть такая возможность). Очень хочу увидить, что на это ответите... Вы вывели какую-то непонятную "истину" и обвинили меня в неправоте, даже не почитав ссылку видимо (где несколько раз повторяется, что код не является открытым и что он компилируется).
...
Рейтинг: 0 / 0
13.06.2013, 05:51
    #38295576
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
nopВ PHP я новичёк и нагуглить по этой теме ничего не смог.
а что там гуглить? открываем доку поддерживаемых типов и видим, что пхп поддерживает а что нет

если прочитаете ссылку выше, то поймете что dword как тип пхп неподдерживает.
но. если нельзя но очень хочется - то можно. битовые сдвиги есть, для упаковки читаем про функции pack() / unpack() флаг L и т.д.
можно написать свой класс, который будет на лету это делать, либо поищите готовый, может уже ктото реализовал, может даже в виде расширения к пхп...

а вообще пхп высокоуровневый язык, если вы успели заметить, и он не особо заточен для работы напрямую с битами. но коечто делать позволяет
...
Рейтинг: 0 / 0
13.06.2013, 08:37
    #38295631
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
r u,

поддержу. Есть все побитовые операции. Там даже отдельного класса генерить особо и не надо, а зачастую и не требуется.

По-поводу "ненужной экономии двух байт": не соглашусь. "Копейка - рупь бережет". На серверах, из-за такого подхода, как правило мозгов не хватает уже при мало-мальски серъезной нагрузке. Ни при какой оперативе.
Это большой миф Г-кодеров в своё оправдание.

Как пример: побайтное хранение каких=нибудь "статусов" - можно в БД выделить тип boolean или что ещё в один байт. Казалось бы "нафига экономить" и лепить побитовые операции? Однако:

при количестве статусов, хотя бы 8 штук, имеем 8 полей. Как правило "статус" - это такая фигня, которая часто ограничивает условия выборки (и отдай мне те, которые ещё не проверены, или ещё не удалены и т.п.)... но на 8 полей, уже приходится накладывать индекс на каждое(!) поле, что уже далеко не один байт на поле...
... и это как ни странно, только "начало": далее надо усложнять запросы, добавляя условия по И/ИЛИ на каждое отдельное поле... удлинять ширину выборки (несколько полей), что уже "внезапно" значительно снижает скорость отдачи (даже по внутреннеей петле сетевого интерфейса - он все равно используется и яваляется самым узким местом в связках "БД - клиент"), усложнять логику клиента, поскольку результат - уже несколько полей объекта "Запись" к примеру и проверки надо вести также расширяя код по И/ИЛИ... а, учитывая что ПХП выделяет память блоками по килобайту и более... рост потребляемой памяти может и вовсе оказаться несоизмеримым.

... в то же время, хранение битовым набором - поддерживается большинством БД (даже в Мускуле есть тип данных set - до 64 бит, а в varbinary - ваще можно "скока угодно"), и "сложность" задачи - это просто банальное незнание и нежедлание узнать работу с битовыми операциями и логическими выражениями.
...
Рейтинг: 0 / 0
13.06.2013, 10:21
    #38295743
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
Програмёрalex564657498765453,

Интерпретация кода, вместо компиляции - это уже другое. Это политика openSource. Помню раньше читал, что собрались классные и умные человечки, и решили, что весь вэб будет на открытых кодах, что бы его было легко править, что бы он был передаваем (так как мало компаний пишут сайт и поддерживают его до последнего, а тем более частники). Но потом пришёл дядя Билл и сказал (как всегда впрочем) "да ну нафиг ваш стандарт" (эм... ну не так конечно, но смысл именно такой). И внедрил в вэб свою платформу ASP.NET, которая является компилируемой. Быстродейственной, но менее удобной для редактирования (не в плане кода, а в плане подготовки к редактированию и требующей установки платного продукта) и неперносимой на некоторые системы (ну или сложно переносимой... логично, ведь компилируемся :) )

Вот так. Так что интерпретация кода вместо его компиляции - это другой вопрос, обусловленный другими аспектами. Вынужденная потеря скорости. В плане же ресурсоёмкости и производительности, уклон делается на производительность, так как винчестера, оперативки у серверов сейчас "ё-маё" :)

P.S. не в обиду тем, кто пишет на .NET, сейчас это тоже уже стандарт многими уважаем. Просто вот так всё было (по тем данным, которые попадались мне). Привёл в пример NET только для того, что бы показать обоснованность принятия решения интерпретации кода на сервере.

да какая нафиг переносимость. исходни если есть то и в перёд, а если нету..ну так наврено нельзя переносить куда хочеться - это чьёто.

а вот что для опенсорса это полезно, то да... ибо ктото может начинать распространять скомпиленый без исходников...и вроде опен сорс, можешь делать что хочешь, ну или с ошибками исходники... а реально совершенно левые смогут на себя тянуть одеяло..

так что нащот переносимости не соглашуссь, а вот опенсорс - поддержвию :)
...
Рейтинг: 0 / 0
13.06.2013, 11:13
    #38295838
nop
nop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля в PHP
ПрограмёрПо-этому я и спросил, я зачем это может потребоваться на php? Сервера не страдают от недостатка оперативки обычно, а значит и экономить, и вместо 16 бит тиснуться в 14 нету смысла :)
Вопрос не в экономии. Веб-приложение должно по определённым правилам генерить 4-ёх байтовый номер для устройства, в который должны быть заложены некоторые его параметры. Параметров 6, при этом разных размеров, и без разбиения по битам их в 4 байта не вставить )


Arhat109r u,

поддержу. Есть все побитовые операции. Там даже отдельного класса генерить особо и не надо, а зачастую и не требуется.

Да побитовые операции - это понятно. Они где угодно есть. Вопрос заключался в том, есть ли в PHP что-то столь же удобное для работы с битовыми полями как в Си.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Битовые поля в PHP / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]