<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: pretty bitwise operations</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9471.html</link>
    <description>Здравствуйте!&lt;br&gt;Дано: Двухбайтовая битовая маска.&lt;br&gt;Задача: сравнить биты данной маски (к примеру, 13-ый и 14-ый).&lt;br&gt;Решение:&lt;br&gt;&#091;code&#093;&lt;br&gt;unsigned short bitMask = 0x6000; // (0110 0000 0000 0000)&lt;br&gt;int bitFlag = 3; // (0000 0000 0000 0000 0000 0000 0000 0011) in 32-bit arch&lt;br&gt;// todo&lt;br&gt;if ( (bitMask&amp;(bitFlag&amp;lt;&amp;lt;13))&amp;gt;&amp;gt;13 == bitFlag )&lt;br&gt;&#123;&lt;br&gt;  // bits are proprietary&lt;br&gt;&#125;&lt;br&gt;&#091;/code&#093;&lt;br&gt;На мой взгляд, конструкция корявая (сдвинули, сложили, опять сдвинули, потом сравнили результат с эталонным). Тем более в большом проекте такая конструкция будет вводить в ступор программистов.&lt;br&gt;Возможно, существуют более изящные приемы работы с битовыми массивами?&lt;br&gt;Спасибо.&lt;br&gt;Алексей&lt;br&gt;</description>

<item>
    <title>pretty bitwise operations (LSTemp)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9471.html#24</link>
    <pubDate>Wed, 13 Jun 2012 12:19:57 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Фактически, вопрос поставлен так, что ...&lt;br&gt;&amp;gt; Фактически, вопрос был: как упростить (A &amp; ( B &amp;lt;&amp;lt; C )) &lt;br&gt;&amp;gt; &amp;gt;&amp;gt; C == D ) :) &lt;br&gt;&lt;br&gt;+1000&lt;br&gt;&lt;br&gt;чувствую себя идиотом.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>pretty bitwise operations (LSTemp)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9471.html#23</link>
    <pubDate>Wed, 13 Jun 2012 12:05:17 GMT</pubDate>
    <description>&amp;gt; &#091;code&#093; &lt;br&gt;&amp;gt; inline int shr_and(void) &#123; &lt;br&gt;&amp;gt;         return ( (our_mask &amp;gt;&amp;gt; &lt;br&gt;&amp;gt; 13 ) &amp; bitFlag); &lt;br&gt;&amp;gt; &#125; &lt;br&gt;&amp;gt; &#091;/code&#093; &lt;br&gt;&lt;br&gt;так не прокатит, хотя идея ясна. надо так видимо (в терминах автора):&lt;br&gt;&lt;br&gt;((bitMask &amp;gt;&amp;gt; 12 ) == bitFlag);&lt;br&gt;</description>
</item>

<item>
    <title>pretty bitwise operations (LSTemp)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9471.html#22</link>
    <pubDate>Wed, 13 Jun 2012 11:50:13 GMT</pubDate>
    <description>&amp;gt;&amp;gt; PS &lt;br&gt;&amp;gt;&amp;gt; к тому же если внимательно вчитаться в начальный вопрос, на который я &lt;br&gt;&amp;gt;&amp;gt; и отвечал: &lt;br&gt;&amp;gt;&amp;gt; &quot; &lt;br&gt;&amp;gt;&amp;gt; Здравствуйте!&lt;br&gt;&amp;gt;&amp;gt; Дано: Двухбайтовая битовая маска.&lt;br&gt;&amp;gt;&amp;gt; Задача: сравнить биты данной маски (к примеру, 13-ый и 14-ый).&lt;br&gt;&amp;gt;&amp;gt; Решение: &lt;br&gt;&amp;gt;   вообще вопрос можно было понять как &quot;одинаковы ли значения 13 &lt;br&gt;&amp;gt; и 14 бита в маске&quot; &lt;br&gt;&lt;br&gt;тогда скорее уж как (если смотреть код автора) установлены ли биты маски (bitMask) 13 и 14 в заданное значение (bitFlag).&lt;br&gt;&lt;br&gt;ИМХО не знаю кто там такой умный - препод или студент, что путает определение данных, масок и флагов.&lt;br&gt;&lt;br&gt;&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt; с неизвестным значением. требуется только сравнить 13-14 бит полученной маски (читай &lt;br&gt;&amp;gt;&amp;gt; - случайное значение) с данными.&lt;br&gt;&amp;gt;   правильная постановка вопроса, имхо - &quot;установлены ли в данной маске &lt;br&gt;&amp;gt; одновременно биты 13 и 14&quot; &lt;br&gt;&amp;gt;    если позиции 13 и 14 жестко заданы и не &lt;br&gt;&amp;gt; меняются на рантайме - тогда вообще никаких сдвигов не надо &lt;br&gt;&amp;gt;    #define  LOVELY_BIT_MASK  ((1&amp;lt;&amp;lt;13) &amp;#124; (1&amp;lt;&amp;lt;14)) &lt;br&gt;&amp;gt;    if ( (our_mask &amp; LOVELY_BIT</description>
</item>

<item>
    <title>pretty bitwise operations (Alex_S)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9471.html#21</link>
    <pubDate>Fri, 08 Jun 2012 01:08:02 GMT</pubDate>
    <description>&amp;gt;&amp;gt;    #define  LOVELY_BIT_MASK  ((1&amp;lt;&amp;lt;13) &amp;#124; (1&amp;lt;&amp;lt;14)) &lt;br&gt;&amp;gt;&amp;gt;    if ( (our_mask &amp; LOVELY_BITMASK) == LOVELY_BITMASK)  - &lt;br&gt;&amp;gt; &quot; == LOVELY_BITMASK &quot; - лишнее.&lt;br&gt;&lt;br&gt;  неа .  если 2 бита надо - не лишнее&lt;br&gt;  иначе может сработать по одному биту&lt;br&gt;  &lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>pretty bitwise operations (pavlinux)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9471.html#20</link>
    <pubDate>Wed, 06 Jun 2012 14:28:53 GMT</pubDate>
    <description>&amp;gt;    #define  LOVELY_BIT_MASK  ((1&amp;lt;&amp;lt;13) &amp;#124; (1&amp;lt;&amp;lt;14)) &lt;br&gt;&amp;gt;    if ( (our_mask &amp; LOVELY_BITMASK) == LOVELY_BITMASK)  - &lt;br&gt;&lt;br&gt;&quot; == LOVELY_BITMASK &quot; - лишнее. &lt;br&gt;</description>
</item>

<item>
    <title>pretty bitwise operations (pavlinux)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9471.html#19</link>
    <pubDate>Wed, 06 Jun 2012 14:02:23 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt; с неизвестным значением. требуется только сравнить 13-14 бит полученной маски (читай &lt;br&gt;&amp;gt;&amp;gt; - случайное значение) с данными.&lt;br&gt;&amp;gt;   правильная постановка вопроса, имхо - &quot;установлены ли в данной маске &lt;br&gt;&amp;gt; одновременно биты 13 и 14&quot; &lt;br&gt;&amp;gt;    если позиции 13 и 14 жестко заданы и не &lt;br&gt;&amp;gt; меняются на рантайме - тогда вообще никаких сдвигов не надо &lt;br&gt;&amp;gt;    #define  LOVELY_BIT_MASK  ((1&amp;lt;&amp;lt;13) &amp;#124; (1&amp;lt;&amp;lt;14)) &lt;br&gt;&amp;gt;    if ( (our_mask &amp; LOVELY_BITMASK) == LOVELY_BITMASK)  - &lt;br&gt;&amp;gt; вполне покатит &lt;br&gt;&amp;gt;    если маска однобитная - то и сравнивать не надо &lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;#define  LOVELY_BITMASK  ((1&amp;lt;&amp;lt;13) &amp;#124; (1&amp;lt;&amp;lt;14))&lt;br&gt;&lt;br&gt;const int our_mask = 0b0011000000000000;&lt;br&gt;const int bitFlag  = 0b0011;&lt;br&gt;&lt;br&gt;inline int love(void) &#123;&lt;br&gt;&lt;br&gt;        return ( (our_mask &amp; LOVELY_BITMASK) == LOVELY_BITMASK);&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;inline int shr_and(void) &#123;&lt;br&gt;&lt;br&gt;        return ( (our_mask &amp;gt;&amp;gt; 13 ) &amp; bitFlag);&lt;br&gt;&#125;&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;# gcc -O0 test.c&lt;br&gt;# objdump -d test.o&lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;0000000000000000 &amp;lt;love&amp;gt;:&lt;br&gt;   0:   55                      push   &#037;rbp&lt;br&gt;   1:   48 89 e</description>
</item>

<item>
    <title>pretty bitwise operations (Alex_S)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9471.html#18</link>
    <pubDate>Wed, 06 Jun 2012 01:28:58 GMT</pubDate>
    <description>&amp;gt;&amp;gt;  херовый у вас фэншуй.&lt;br&gt;&amp;gt;&amp;gt; а надо иметь уже сдвинутое значение &lt;br&gt;&amp;gt; А кто это значение должен &quot;уже сдвинуть&quot;? Само? :) &lt;br&gt;&lt;br&gt;  компилятор. дефайны. сюрприз ?&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;  хотя для динамически вычисляемых масок не катит, конечно же..&lt;br&gt;</description>
</item>

<item>
    <title>pretty bitwise operations (Alex_S)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9471.html#17</link>
    <pubDate>Wed, 06 Jun 2012 01:27:32 GMT</pubDate>
    <description>&amp;gt; PS &lt;br&gt;&amp;gt; к тому же если внимательно вчитаться в начальный вопрос, на который я &lt;br&gt;&amp;gt; и отвечал: &lt;br&gt;&amp;gt; &quot; &lt;br&gt;&amp;gt; Здравствуйте!&lt;br&gt;&amp;gt; Дано: Двухбайтовая битовая маска.&lt;br&gt;&amp;gt; Задача: сравнить биты данной маски (к примеру, 13-ый и 14-ый).&lt;br&gt;&amp;gt; Решение: &lt;br&gt;&lt;br&gt;  вообще вопрос можно было понять как &quot;одинаковы ли значения 13 и 14 бита в маске&quot;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt; с неизвестным значением. требуется только сравнить 13-14 бит полученной маски (читай &lt;br&gt;&amp;gt; - случайное значение) с данными. &lt;br&gt;&lt;br&gt;  правильная постановка вопроса, имхо - &quot;установлены ли в данной маске одновременно биты 13 и 14&quot;&lt;br&gt;&lt;br&gt;   если позиции 13 и 14 жестко заданы и не меняются на рантайме - тогда вообще никаких сдвигов не надо&lt;br&gt;  &lt;br&gt;   #define  LOVELY_BIT_MASK  ((1&amp;lt;&amp;lt;13) &amp;#124; (1&amp;lt;&amp;lt;14)) &lt;br&gt;&lt;br&gt;   if ( (our_mask &amp; LOVELY_BITMASK) == LOVELY_BITMASK)  - вполне покатит &lt;br&gt;&lt;br&gt;   если маска однобитная - то и сравнивать не надо&lt;br&gt;&lt;br&gt; &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>pretty bitwise operations (pavlinux)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9471.html#16</link>
    <pubDate>Mon, 04 Jun 2012 18:18:05 GMT</pubDate>
    <description>&amp;gt; Фактически, вопрос поставлен так, что ...&lt;br&gt;&lt;br&gt;Фактически, вопрос был: как упростить (A &amp; ( B &amp;lt;&amp;lt; C )) &amp;gt;&amp;gt; C == D ) :)&lt;br&gt;</description>
</item>

</channel>
</rss>
