{"id":26976,"date":"2022-12-21T14:51:28","date_gmt":"2022-12-21T09:21:28","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/"},"modified":"2022-12-21T14:51:28","modified_gmt":"2022-12-21T09:21:28","slug":"solved-dividing-a-bit-string-into-three-parts-in-c","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/","title":{"rendered":"[Solved] Dividing a bit string into three parts in C"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-42311820\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"42311820\" data-parentid=\"42311028\" data-score=\"0\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>The <code>splitter()<\/code> function here does the job you ask for.  It takes quite a lot of arguments, unfortunately.  There&#8217;s the value to be split (<code>value<\/code>), the size of the chunk at the least significant end of the value (<code>p1<\/code>), the size of the middle chunk (<code>p2<\/code>), and then pointers to the high, medium and low values (<code>hi_val<\/code>, <code>md_val<\/code>, <code>lo_val<\/code>).<\/p>\n<pre><code>#include &lt;assert.h&gt;\n#include &lt;inttypes.h&gt;\n#include &lt;stdio.h&gt;\n\nstatic void splitter(uint32_t value, unsigned p1, unsigned p2, uint32_t *hi_val, uint32_t *md_val, uint32_t *lo_val)\n{\n    assert(p1 + p2 &lt; 32);\n    *lo_val = value &amp; ((1U &lt;&lt; p1) - 1);\n    value &gt;&gt;= p1;\n    *md_val = value &amp; ((1U &lt;&lt; p2) - 1);\n    value &gt;&gt;= p2;\n    *hi_val = value;\n}\n\nstatic void test_splitter(uint32_t value, int p1, int p2)\n{\n    uint32_t hi_val;\n    uint32_t md_val;\n    uint32_t lo_val;\n\n    splitter(value, p1, p2, &amp;hi_val, &amp;md_val, &amp;lo_val);\n    printf(\"0x%.8\" PRIX32 \" (%2u,%2u,%2u) = 0x%.4\" PRIX32 \" : 0x%.4\" PRIX32 \" : 0x%.4\" PRIX32 \"\\n\",\n            value, (32 - p1 - p2), p2, p1, hi_val, md_val, lo_val);\n}\n\nint main(void)\n{\n    uint32_t value;\n\n    value = 0xFFFFFFFF;\n    test_splitter(value, 9, 11);\n    value = 0xFFF001FF;\n    test_splitter(value, 9, 11);\n    value = 0x000FFE00;\n    test_splitter(value, 9, 11);\n\n    value = 0xABCDEF01;\n    test_splitter(value, 10, 6);\n    test_splitter(value, 8, 8);\n    test_splitter(value, 13, 9);\n    test_splitter(value, 10, 8);\n\n    return 0;\n}\n<\/code><\/pre>\n<p>The <code>test_splitter()<\/code> function allows for simple testing of a single value plus the sections it is to be split in, and <code>main()<\/code> calls the test function a number of times.<\/p>\n<p>The output is:<\/p>\n<pre><code>0xFFFFFFFF (12,11, 9) = 0x0FFF : 0x07FF : 0x01FF\n0xFFF001FF (12,11, 9) = 0x0FFF : 0x0000 : 0x01FF\n0x000FFE00 (12,11, 9) = 0x0000 : 0x07FF : 0x0000\n0xABCDEF01 (16, 6,10) = 0xABCD : 0x003B : 0x0301\n0xABCDEF01 (16, 8, 8) = 0xABCD : 0x00EF : 0x0001\n0xABCDEF01 (10, 9,13) = 0x02AF : 0x006F : 0x0F01\n0xABCDEF01 (14, 8,10) = 0x2AF3 : 0x007B : 0x0301\n<\/code><\/pre>\n<p>If any of the sections is larger than 16, the display gets spoiled \u2014 but the code still works.<\/p>\n<p>In theory, the <code>1U<\/code> values could be a 16-bit quantity, but I&#8217;m assuming that the CPU is working with 32-bit <code>int<\/code>.  There are ways (<code>UINT32_C(1)<\/code>) to ensure that it is a 32-bit value, but that&#8217;s probably OTT.  The code explicitly forces 32-bit unsigned integer values, and prints them as such.<\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\"><\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Dividing a bit string into three parts in C <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] The splitter() function here does the job you ask for. It takes quite a lot of arguments, unfortunately. There&#8217;s the value to be split (value), the size of the chunk at the least significant end of the value (p1), the size of the middle chunk (p2), and then pointers to the high, medium and &#8230; <a title=\"[Solved] Dividing a bit string into three parts in C\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/\" aria-label=\"More on [Solved] Dividing a bit string into three parts in C\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[2005,1549,324],"class_list":["post-26976","post","type-post","status-publish","format-standard","hentry","category-solved","tag-bit","tag-bitstream","tag-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Dividing a bit string into three parts in C - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Dividing a bit string into three parts in C - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] The splitter() function here does the job you ask for. It takes quite a lot of arguments, unfortunately. There&#8217;s the value to be split (value), the size of the chunk at the least significant end of the value (p1), the size of the middle chunk (p2), and then pointers to the high, medium and ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-21T09:21:28+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Dividing a bit string into three parts in C\",\"datePublished\":\"2022-12-21T09:21:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/\"},\"wordCount\":172,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"bit\",\"bitstream\",\"c++\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/\",\"name\":\"[Solved] Dividing a bit string into three parts in C - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-12-21T09:21:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Dividing a bit string into three parts in C\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Dividing a bit string into three parts in C - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Dividing a bit string into three parts in C - JassWeb","og_description":"[ad_1] The splitter() function here does the job you ask for. It takes quite a lot of arguments, unfortunately. There&#8217;s the value to be split (value), the size of the chunk at the least significant end of the value (p1), the size of the middle chunk (p2), and then pointers to the high, medium and ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/","og_site_name":"JassWeb","article_published_time":"2022-12-21T09:21:28+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Dividing a bit string into three parts in C","datePublished":"2022-12-21T09:21:28+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/"},"wordCount":172,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["bit","bitstream","c++"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/","url":"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/","name":"[Solved] Dividing a bit string into three parts in C - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-12-21T09:21:28+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-dividing-a-bit-string-into-three-parts-in-c\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Dividing a bit string into three parts in C"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/26976","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=26976"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/26976\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=26976"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=26976"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=26976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}