{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Llemilio: заметки с тегом c++",
    "_rss_description": "Баги моего времени",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": false,
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/llemilio.ru\/tags\/c\/",
    "feed_url": "https:\/\/llemilio.ru\/tags\/c\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "Llemilio",
            "url": "https:\/\/llemilio.ru\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "4",
            "url": "https:\/\/llemilio.ru\/all\/funkcii-opredelyayuschie-bitovy-harakter-chisla\/",
            "title": "Функции C++ определяющие битовый характер числа",
            "content_html": "<p>Проверка на то, что в «1» установлен только один бит<br \/>\n<br><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/\/ 000001000 - true\n\/\/ 000001010 - false\n\/\/ 000000000 - false\ntemplate&lt; typename T &gt; \/\/ работает только для целых чисел\nbool only_one_bit_set_to_one (T bits)\n{\n    return bits &amp;&amp; !(bits &amp; (bits-1));\n}<\/code><\/pre><p>Обратите внимание, что операторы «&&» и «!» логические, а не битовые!<br \/>\n<br><br \/>\nПроверка на то что установлен только один бит и его порядковый номер от 0 до sizeof(T)-1<br \/>\n<br><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">template&lt; typename T &gt;\nint findSetBit(T bits)\n{\n    if (!(bits &amp;&amp; !(bits &amp; (bits-1))))\n        return -1;\n    return log2(bits);\n}<\/code><\/pre><p><br><br \/>\nКомпилятор GNU (GCC) имеет в своем арсенале стандартную функцию для определения числа установленных битов<br \/>\n<br><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#include &lt;iostream&gt;\n\nint main()\n{\n   std::cout &lt;&lt; __builtin_popcount (4) &lt;&lt; std::endl;\n   std::cout &lt;&lt; __builtin_popcount (3) &lt;&lt; std::endl;\n\n   return 0;\n}<\/code><\/pre><p><br><br \/>\nНачиная с С++11 можно использовать тип <a href=\"http:\/\/www.cplusplus.com\/reference\/bitset\/bitset\/\">bitset<\/a> в котором реализованы функции any(), none(), count() etc<br \/>\n<br><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#include &lt;iostream&gt;       \/\/ std::cin, std::cout\n#include &lt;bitset&gt;         \/\/ std::bitset\n\nint main ()\n{\n  std::bitset&lt;16&gt; foo;\n\n  std::cout &lt;&lt; &quot;Please, enter a binary number: &quot;;\n  std::cin &gt;&gt; foo;\n\n  if (foo.any())\n    std::cout &lt;&lt; foo &lt;&lt; &quot; has &quot; &lt;&lt; foo.count() &lt;&lt; &quot; bits set.\\n&quot;;\n  else\n    std::cout &lt;&lt; foo &lt;&lt; &quot; has no bits set.\\n&quot;;\n\n  return 0;\n}<\/code><\/pre>",
            "date_published": "2019-05-27T12:04:21+03:00",
            "date_modified": "2019-05-27T12:03:53+03:00",
            "tags": [
                "bitwise",
                "c++"
            ],
            "_date_published_rfc2822": "Mon, 27 May 2019 12:04:21 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "4",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 4171,
    "_e2_ua_string": "Aegea 11.4 (v4171e)"
}