{"id":53,"date":"2017-04-09T21:14:05","date_gmt":"2017-04-09T21:14:05","guid":{"rendered":"http:\/\/www.derhecht.de\/content\/?p=53"},"modified":"2017-04-09T21:22:02","modified_gmt":"2017-04-09T21:22:02","slug":"bit-in-einen-byte-setzen","status":"publish","type":"post","link":"https:\/\/www.derhecht.de\/content\/bit-in-einen-byte-setzen\/","title":{"rendered":"Bit in einen Byte setzen"},"content":{"rendered":"<p>Wie auch beim Bit pr\u00fcfen stehen auch beim Setzen einzelner Bits verschiedene Methoden zur Verf\u00fcgung. Erst m\u00f6chte ich die Inline-Variante aufzeigen. Beim Setzen eines Bits muss lediglich das Byte mit der Bitmaske (hier 0000 0100) &#8222;verodert&#8220; werden.<\/p>\n<pre><code class=\"c++\">\/\/Bitnummer 2 setzen\r\nint x = 0x9;         \/\/ Bitmuster 0000 1001\r\nx = x | 0x4;         \/\/ gesetzt weil 0x4 -&gt; 0000 0100<\/code><\/pre>\n<p>Beim Zur\u00fccksetzen (l\u00f6schen) eines Bits muss die Bitmaske negiert werden um dann mit dem Byte &#8222;verundet&#8220; zu werden. Klingt seltsam &#8211; ist es aber nicht.<\/p>\n<pre><code class=\"c++\">\/\/Bitnummer 2 l\u00f6schen\r\nint x = 0xd;         \/\/ Bitmuster 0000 1101\r\nx = x &amp; (~0x4);      \/\/ gel\u00f6scht weil ~0x4 -&gt; 1111 1011<\/code><\/pre>\n<p>Nat\u00fcrlich besteht auch hier die M\u00f6glichkeit das Ganze in eine Funktion zu packen.\u00a0Das Ergebnis einer Schiebe-Operation ist in der Regel ein int. Deshalb auch der Cast in ein BYTE um die Compiler-Warnungen zu unterbinden.<\/p>\n<pre><code class=\"c++\">\/\/Bit setzen \/ l\u00f6schen\r\nBYTE SetBit(BYTE data, BYTE Bit, BOOL value)\r\n{\r\n  BYTE mask = (BYTE)(0x1 &lt;&lt; Bit);\r\n  if(value == TRUE)\r\n    return (BYTE)(data | mask);\r\n  else\r\n    return (BYTE)(data &amp; (~mask));\r\n}<\/code><\/pre>\n<p>So wird die neue Funktion verwendet<\/p>\n<pre><code class=\"c++\">BYTE x = 0x9;               \/\/ Bitmuster 0000 1001\r\nx = SetBit(x, 2, TRUE);    \/\/ x = 0000 1101\r\nx = SetBit(x, 3, FALSE);   \/\/ x = 0000 0101<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Wie auch beim Bit pr\u00fcfen stehen auch beim Setzen einzelner Bits verschiedene Methoden zur Verf\u00fcgung. Erst m\u00f6chte ich die Inline-Variante aufzeigen. Beim Setzen eines Bits muss lediglich das Byte mit der Bitmaske (hier 0000 0100) &#8222;verodert&#8220; werden. \/\/Bitnummer 2 setzen int x = 0x9; \/\/ Bitmuster 0000 1001 x = x | 0x4; \/\/ gesetzt [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[12,13],"class_list":["post-53","post","type-post","status-publish","format-standard","hentry","category-wincc-c-script","tag-bitmaske","tag-setbit"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/posts\/53","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/comments?post=53"}],"version-history":[{"count":2,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/posts\/53\/revisions"}],"predecessor-version":[{"id":57,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/posts\/53\/revisions\/57"}],"wp:attachment":[{"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/media?parent=53"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/categories?post=53"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/tags?post=53"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}