<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; BASH и С\С++. Псевдографические символы.]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=14014&amp;type=atom" />
	<updated>2011-05-31T16:02:46Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=14014</id>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=184186#p184186" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Fat-Zer пишет:</cite><blockquote><p>именно это - все современные, кроме поделия от М$, а полностью стандарт поддерживают (по слухам) только sun&#039;овский и то, что сделало IBM.</p></blockquote></div><p>угу... впрочем, в контексте сабжа трудно не согласится - в венде всё через /dev/ass&nbsp; smile <br /></p><div class="quotebox"><cite>Fat-Zer пишет:</cite><blockquote><p>я тоже хочу такую траву.</p></blockquote></div><p>да... что-то мне занесло&nbsp; :lol:</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2011-05-31T16:02:46Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=184186#p184186</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=184182#p184182" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>drBatty пишет:</cite><blockquote><p>все компиляторы это пожрут?</p></blockquote></div><p>именно это - все современные, кроме поделия от М$, а полностью стандарт поддерживают (по слухам) только sun&#039;овский и то, что сделало IBM.</p><div class="quotebox"><cite>drBatty пишет:</cite><blockquote><p>повлияет, если процессор и компилятор по разному смотрят на порядок...</p></blockquote></div><p>эмм... я тоже хочу такую траву.</p>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2011-05-31T15:50:42Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=184182#p184182</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=184142#p184142" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Fat-Zer пишет:</cite><blockquote><p>сложение по модулю 2 это xor</p></blockquote></div><p>угу. там чуть ниже про XOR есть.<br /></p><div class="quotebox"><cite>Fat-Zer пишет:</cite><blockquote><p>С99 с его uint32_t спасёт отца русской демократии...</p></blockquote></div><p>все компиляторы это пожрут?<br /></p><div class="quotebox"><cite>Fat-Zer пишет:</cite><blockquote><p>не должен</p></blockquote></div><p>повлияет, если процессор и компилятор по разному смотрят на порядок...</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2011-05-31T14:02:46Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=184142#p184142</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=184117#p184117" />
			<content type="html"><![CDATA[<p>поправка:<br /></p><div class="quotebox"><cite>drBatty пишет:</cite><blockquote><p>а | &quot;логическим сложением&quot;. Ну и из-за правил. Это действительно сложение, но по модулю 2. Т.е. двойка откидывается. Потому 1+1 =&gt; 2 =&gt; 2+0 =&gt; 0(mod2))</p></blockquote></div><p>сложение по модулю 2 это xor</p><div class="quotebox"><cite>drBatty пишет:</cite><blockquote><p>Вот voral потренировался сегодня, завтра радостно что-то напишет. А после завтра это рухнет</p></blockquote></div><p>С99 с его uint32_t спасёт отца русской демократии...</p><div class="quotebox"><cite>drBatty пишет:</cite><blockquote><p>Естественно, порядок байтов влияет на сдвиг.</p></blockquote></div><p>не должен, но я бы 3 раза проверил если бы работал с биг-эндингом... а вот приведение типов разного размера он может порушить...</p>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2011-05-31T13:22:38Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=184117#p184117</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=184107#p184107" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>gramozeka пишет:</cite><blockquote><p>кстати в учебнике об этом совсем мало и ни одного практического примера кроме умножения ..</p></blockquote></div><p>дык говорю-же: слабое место Си <img src="https://linuxforum.ru/img/smilies/ac.gif" alt="ac" /><br />не сказать что баг, но не иссякающий&nbsp; источник багов...<br />вроде побочных эффектов.</p><p>Кстати, приоритеты не очень логичные, и лучше не писать в одну строчку. Лучше по одной операции в одной строке. Тоже кладезь багов...</p><p>В паскакалях есть &quot;наборы&quot;, которые, как я понял, те-же булевы операции. Но они огорожены. А тут... А ещё порядок байт вообще-говоря разный бывает, обычно сначала младший, но не всегда. Естественно, порядок байтов влияет на сдвиг.</p><p>На практике, сдвигами можно заменить умножение на константу. Например<br />(x &lt;&lt; 1) + (x &lt;&lt; 3) == 2*x+8*x == 10*x.<br />(опять таки не факт, что это быстрее. А если даже быстрее, не факт, что компилятор об этом не знает. Я уже так нарывался - мучаешься, пишешь... А потом оказывается, что компилятор написал даже лучше меня.)</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2011-05-31T13:04:31Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=184107#p184107</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=184100#p184100" />
			<content type="html"><![CDATA[<p>записал в &quot;полезности&quot; ...<br /> <img src="https://linuxforum.ru/img/smilies/ag.gif" alt="ag" /> - буду изучать , кстати в учебнике об этом совсем мало и ни одного практического примера кроме умножения .. smile</p>]]></content>
			<author>
				<name><![CDATA[gramozeka]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6831</uri>
			</author>
			<updated>2011-05-31T12:43:40Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=184100#p184100</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=184069#p184069" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>gramozeka пишет:</cite><blockquote><p>или на пальцах растолкуйте</p></blockquote></div><p>попробую...<br />итак: имеются три основные битовые операции:<br />1) инверсия<br /></p><div class="codebox"><pre><code>0 =&gt; 1
1 =&gt; 0</code></pre></div><p>2)логическое И<br /></p><div class="codebox"><pre><code>0 &amp; 0 =&gt; 0
0 &amp; 1 =&gt; 0
1 &amp; 0 =&gt; 0
1 &amp; 1 =&gt; 1</code></pre></div><p>3) логическое ИЛИ<br /></p><div class="codebox"><pre><code>0 | 0 =&gt; 0
0 | 1 =&gt; 1
1 | 0 =&gt; 1
1 | 1 =&gt; 1</code></pre></div><p>В Си логические операции выполняются над всеми байтами сразу. Обычно используют тип unsigned, который имеет длину типичную для машинного слова (32 или 64 бита сегодня).<br />Есть ещё операция ^<br />x ^ y == x &amp; ~y | ~x &amp; y<br />Она работает как ИЛИ, только 1 ^ 1 =&gt; 0. Потому и называется &quot;исключающее или&quot;, или короче XOR.</p><p>Приоритеты:<br />~ самый высокий (инверсия)<br />&amp;<br />|</p><p>(из-за приоритетов &amp; иногда называют &quot;логическим умножением&quot;, а | &quot;логическим сложением&quot;. Ну и из-за правил. Это действительно сложение, но по модулю 2. Т.е. двойка откидывается. Потому 1+1 =&gt; 2 =&gt; 2+0 =&gt; 0(mod2))</p><p>Биты двигать нельзя (К.О.), но слова из многих бит - можно. И влево, и вправо. Выдвигаемые биты бесследно исчезают (потому-то это слабое место - всегда надо помнить о потере информации).</p><p>x &lt;&lt; n это сдвиг x влево на n битов. Операция бинарная, сам x не меняется.<br />x &gt;&gt; n это сдвиг вправо.</p><p>Сколько битов в unsigned - никто не знает. Биты выдвигаются в никуда. Потому пользоваться сдвигами в Си == ходить по минному полю.<br />Вот <strong>voral</strong> потренировался сегодня, завтра радостно что-то напишет. А после завтра это рухнет&nbsp; :O <br />Ибо, как именно двигаются слова - в стандарте не определено (особенно знаковые), а значит, сегодня они двигаются так,&nbsp; а завтра - эдак.</p><p>И тем не менее, их иногда приходится применять. Ибо - быстро. x&lt;&lt;1 это тоже самое, что x*2, но намного быстрее. (но опять-таки - не всегда. 128&lt;&lt;1 == 0, если 128 - это char).</p><p>Логические операции применяются шире. Иногда удобно делать логику именно на битах. ИМХО можно полагать, что unsigned это как минимум 32 бита. Хотя такой быдлокод ОБЯЗАТЕЛЬНО надо подробно прокоментировать, что-бы починить его, когда он сломается.</p><p>Кстати, чисто заменой побитовых операций на обычные, можно значительно <strong>ускорить</strong> работу программы (ага, как это и не парадоксально). В частности сказывается то, что CPU распараллеливает не только данные, но и операции. Потому далеко не факт, что одна операция над двумя битами будет быстрее, чем две операции над двумя числами. Ещё в iP1 появился второй конвейер.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2011-05-31T11:12:48Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=184069#p184069</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=183999#p183999" />
			<content type="html"><![CDATA[<p>это получается вы там что-то с битами химичите так ?? где почитать , дайте ссыль ... или на пальцах растолкуйте , теорию я читал , только как это с практикой сочетается ???</p>]]></content>
			<author>
				<name><![CDATA[gramozeka]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6831</uri>
			</author>
			<updated>2011-05-31T07:56:45Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=183999#p183999</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=183958#p183958" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>drBatty пишет:</cite><blockquote><p>между прочим - зря. так никто не делает.<br />битовые операции - слабое место С.</p></blockquote></div><p>Если честно, я еще и их на этом примере не много погонял (много, что в итоге осталось за кадром) т.к. на практике с битовыми операциями сталкивался от силы пару раз.</p><br /><div class="quotebox"><cite>drBatty пишет:</cite><blockquote><p>смените плюс на |.<br />оно конечно и так работает, но некрасиво.</p></blockquote></div><p>логично <img src="https://linuxforum.ru/img/smilies/ab.gif" alt="ab" /></p>]]></content>
			<author>
				<name><![CDATA[voral]]></name>
				<uri>https://linuxforum.ru/profile.php?id=841</uri>
			</author>
			<updated>2011-05-31T06:00:11Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=183958#p183958</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=183946#p183946" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

unsigned getcode(unsigned index)
{
    unsigned a = index &amp; 0xF000;
    a &gt;&gt;=12;
    unsigned b = index &amp; 0xfc0;
    b &lt;&lt;= 2;
    unsigned c = index &amp; 0x3f;
    c &lt;&lt;=16;
    return a | b | c | 0x8080e0;
}

unsigned re(unsigned index)
{
    unsigned a = index &amp; 0xFF0000;
    a &gt;&gt;= 16;
    unsigned b = index &amp; 0xff00;
    unsigned c = index &amp; 0xff;
    c &lt;&lt;= 16;
    return a | b | c;
}

int main()
{
    unsigned code;
    int i, j;
    char str[8];
    printf(&quot;┏━━━━┯━━━━━━┯━┳━━━━┯━━━━━━┯━┳━━━━┯━━━━━━┯━┳━━━━┯━━━━━━┯━┓\n&quot;);
    j = 1;
    for (i = 0x2500;i&lt;=0x259F;i++)
    {
        if(j == 1)
            printf(&quot;┃&quot;);
        code = getcode(i);
        memcpy(str, &amp;code, sizeof(unsigned));
        printf(&quot;%04x│%06x│%s┃&quot;, i, re(code), str);
        if(j &gt;= 4)
        {
            printf(&quot;\n&quot;);
            j = 0;
        }
        j++;
    }
    printf(&quot;┗━━━━┷━━━━━━┷━┻━━━━┷━━━━━━┷━┻━━━━┷━━━━━━┷━┻━━━━┷━━━━━━┷━┛\n&quot;);
    return 0;
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2011-05-31T03:09:03Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=183946#p183946</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=183944#p183944" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>voral пишет:</cite><blockquote><p>Пришлось несколько софтин где с данными в хексе пришлось много работать да про работу с битами тут несколько раз последнее время говорили..... А с псевдографикой я не то что в линуксе я в си первый раз столкнулся, а из поса дока еще и про связь с utf8 узнал.... Стало интересно поковырять. Вот табличку варганил</p></blockquote></div><p>между прочим - зря. так никто не делает.<br />битовые операции - слабое место С.<br /></p><div class="quotebox"><cite>voral пишет:</cite><blockquote><p> return ((index &amp; 0xF000)&gt;&gt;12) + ((index &amp; 0xfc0)&lt;&lt;2) + ((index &amp; 0x3f)&lt;&lt;16) + 0x8080e0;</p></blockquote></div><p>смените плюс на |.<br />оно конечно и так работает, но некрасиво.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2011-05-31T03:07:52Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=183944#p183944</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=183927#p183927" />
			<content type="html"><![CDATA[<p><strong>voral</strong> собсно это мне и нужно было , буду разбираться как это работает ...</p>]]></content>
			<author>
				<name><![CDATA[gramozeka]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6831</uri>
			</author>
			<updated>2011-05-30T21:40:28Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=183927#p183927</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=183922#p183922" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>gramozeka пишет:</cite><blockquote><p>ну раз такое дело ткните носом где об этих алгоритмах почитать .. а то я дальше своей подписи&nbsp; :O не продвинулся ..</p></blockquote></div><p>я ни где не читал... Пришлось несколько софтин где с данными в хексе пришлось много работать да про работу с битами тут несколько раз последнее время говорили..... А с псевдографикой я не то что в линуксе я в си первый раз столкнулся, а из поса дока еще и про связь с utf8 узнал.... Стало интересно поковырять. Вот табличку варганил<br /></p><div class="codebox"><pre><code>#include &lt;stdio.h&gt;
unsigned int getcode(unsigned int index)
{
    return ((index &amp; 0xF000)&gt;&gt;12) + ((index &amp; 0xfc0)&lt;&lt;2) + ((index &amp; 0x3f)&lt;&lt;16) + 0x8080e0;
}
unsigned int re(unsigned int index)
{
    return ((index &amp; 0xFF0000)&gt;&gt;16) + (index &amp; 0xff00) + ((index &amp; 0xff)&lt;&lt;16);
}
main()
{
    unsigned int test1=0;
    unsigned int *wchar1 = &amp;test1;
    int i;
    for (i = 0x2500;i&lt;=0x259F;i++)
    {
        test1 = getcode(i);
        printf(&quot;%x\t%x\t%s\n&quot;,i, re(test1),wchar1);
    }
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[voral]]></name>
				<uri>https://linuxforum.ru/profile.php?id=841</uri>
			</author>
			<updated>2011-05-30T21:10:28Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=183922#p183922</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=183902#p183902" />
			<content type="html"><![CDATA[<p><strong>drBatty</strong> да про обоих , я уж целый день упражняюсь , а такими темпами глядишь к пенсии и &quot;Hello World !&quot; в рамочке траурной осилю . smile</p>]]></content>
			<author>
				<name><![CDATA[gramozeka]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6831</uri>
			</author>
			<updated>2011-05-30T19:38:23Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=183902#p183902</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: BASH и С\С++. Псевдографические символы.]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=183898#p183898" />
			<content type="html"><![CDATA[<p><strong>gramozeka</strong>, про bash или про C?</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2011-05-30T19:30:30Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=183898#p183898</id>
		</entry>
</feed>
