<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Logik Problem: Vermeidung von if Abfragen]]></title><description><![CDATA[<p>Hallo, ich habe folgendes struct:</p>
<pre><code class="language-cpp">struct FARBE
{
    bool blue;
    bool green;
    bool black;
    bool white;
    bool red;
};
</code></pre>
<p>Zudem habe ich eine Klasse, die ein Farbobjekt als eigenschaft hat</p>
<pre><code class="language-cpp">class Klasse
{
   public:
    FARBE farben;
};
</code></pre>
<p>Nun habe ich jede Menge Objekte von Klasse. Einige davon sollen aussortiert werden. Dazu gibt es eine Bedingung:</p>
<pre><code class="language-cpp">FARBE bedingung;

bedingung.blue=true;
bedingung.green=false;
bedingung.black=true;
bedingung.white=true;
bedingung.red=false;
</code></pre>
<p>In diesem Beispiel sollen nun alle Objekte der Klasse aussortiert werden, die der Bedingung (blau, schwarz, weiß) nicht gerecht werden. Die Bedingung ist genau dann erfüllt, wenn ein Objekt Blau, schwarz, weiß, Blau und schwarz, Blau und weiß, ..., Blau und schwarz und weiß ist.<br />
Jetzt könnte ich ewig viele if Bedingungen schreiben, um jeden einzelnen Fall zu erfassen. Hat jemand eine Idee für einen algorithmus, der diese Arbeit erleichtert?<br />
Ich hoffe ihr versteht das Problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244690/logik-problem-vermeidung-von-if-abfragen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 04:53:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244690.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Jul 2009 23:40:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Fri, 03 Jul 2009 23:40:01 GMT]]></title><description><![CDATA[<p>Hallo, ich habe folgendes struct:</p>
<pre><code class="language-cpp">struct FARBE
{
    bool blue;
    bool green;
    bool black;
    bool white;
    bool red;
};
</code></pre>
<p>Zudem habe ich eine Klasse, die ein Farbobjekt als eigenschaft hat</p>
<pre><code class="language-cpp">class Klasse
{
   public:
    FARBE farben;
};
</code></pre>
<p>Nun habe ich jede Menge Objekte von Klasse. Einige davon sollen aussortiert werden. Dazu gibt es eine Bedingung:</p>
<pre><code class="language-cpp">FARBE bedingung;

bedingung.blue=true;
bedingung.green=false;
bedingung.black=true;
bedingung.white=true;
bedingung.red=false;
</code></pre>
<p>In diesem Beispiel sollen nun alle Objekte der Klasse aussortiert werden, die der Bedingung (blau, schwarz, weiß) nicht gerecht werden. Die Bedingung ist genau dann erfüllt, wenn ein Objekt Blau, schwarz, weiß, Blau und schwarz, Blau und weiß, ..., Blau und schwarz und weiß ist.<br />
Jetzt könnte ich ewig viele if Bedingungen schreiben, um jeden einzelnen Fall zu erfassen. Hat jemand eine Idee für einen algorithmus, der diese Arbeit erleichtert?<br />
Ich hoffe ihr versteht das Problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736920</guid><dc:creator><![CDATA[Logigproblem]]></dc:creator><pubDate>Fri, 03 Jul 2009 23:40:01 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Fri, 03 Jul 2009 23:57:23 GMT]]></title><description><![CDATA[<p>Schau mal im Tutorial deiner Wahl nach den logischen Operatoren || und &amp;&amp;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736924</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 03 Jul 2009 23:57:23 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 00:25:53 GMT]]></title><description><![CDATA[<p>Die Operatoren sind mir natürlich bekannt.</p>
<p>Trotzdem wäre der Ansatz ja:</p>
<pre><code class="language-cpp">if(bedingung.blue==false &amp;&amp; bedingung.green==false &amp;&amp; bedingung.red==false &amp;&amp; bedingung.white==false &amp;&amp; bedingung.black==false)
{
    if(objekt.farbe.blue || objekt.farbe.green || objekt.farbe.red || objekt.farbe.white || objekt.farbe.black)
        return false;
}
if(bedingung.blue &amp;&amp; bedingung.green &amp;&amp; bedingung.red &amp;&amp; bedingung.white==false &amp;&amp; bedingung.black==false)
{
    if(objekt.farbe.blue==false || objekt.farbe.green==false || objekt.farbe.red==false || objekt.farbe.white || objekt.farbe.black)
        return false;
}
</code></pre>
<p>Das sind gerade mal 2 von 25 möglichen Bedingungen. Verstehst du jetzt, was ich meine? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736927</guid><dc:creator><![CDATA[Logigproblem]]></dc:creator><pubDate>Sat, 04 Jul 2009 00:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 00:26:01 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>das wäre mein Ansatz, aber ich bin mir nicht sicher, ob ich die Aufgabenstellung korrekt verstanden habe.<br />
In diesem Fall reicht es, wenn das Objekt eine der angegebenen Farben erfüllt.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

struct Color
{
	bool red;
	bool green;
	bool blue;
	bool white;
	bool black;
};

bool checkColor(const Color&amp; col, const std::string&amp; cond);

int main()
{
	Color test;
	test.red = false;
	test.green = false;
	test.blue = false;
	test.white = false;
	test.black = true;

	// Bedingung ist erfüllt, wenn das Objekt 
	// rot (r), gelb (g), blau (b) oder schwarz (B) ist

	if (checkColor(test, &quot;rgbB&quot;))
	{
		std::cout &lt;&lt; &quot;Okay&quot; &lt;&lt; std::endl;
	}
}

bool checkColor(const Color&amp; col, const std::string&amp; cond)
{
	for (unsigned int i = 0; i &lt; cond.length(); ++i)
	{
		switch (cond[i])
		{
			case 'r': // red
				if (col.red) 
					return true;
				break;

			case 'g': // green
				if (col.green) 
					return true;
				break;

			case 'b': // blue
				if (col.blue) 
					return true;
				break;

			case 'w': // white
				if (col.white) 
					return true;
				break;

			case 'B': // black
				if (col.black) 
					return true;
				break;
		}
	}

	return false;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1736928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736928</guid><dc:creator><![CDATA[BBBB]]></dc:creator><pubDate>Sat, 04 Jul 2009 00:26:01 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 00:34:39 GMT]]></title><description><![CDATA[<p>Nicht ganz. Die Bedingung ist für das Objekt erfüllt, wenn eine oder mehrere Farben zutreffen. Jedoch nicht, wenn das Objekt eine andere Farbe besitzt.<br />
zB:<br />
Die Bedingung ist Rot, Blau, Grün</p>
<p>Ein Objekt mit der Farbe Rot -&gt; Erfüllt<br />
Ein Objekt mit den Farben Rot und Grün -&gt; Erfüllt<br />
Ein Objekt mit der Farbe Weiß -&gt; Nicht erfüllt<br />
Ein Objekt mit den Farben Rot und Weiß -&gt; Nicht erfüllt</p>
<p>Und es sind natürlich 32 Mögliche Bedingungen, nich 25 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736929</guid><dc:creator><![CDATA[Logigproblem]]></dc:creator><pubDate>Sat, 04 Jul 2009 00:34:39 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 06:09:13 GMT]]></title><description><![CDATA[<p>Hab mich vertan...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736940</guid><dc:creator><![CDATA[Kronos_m]]></dc:creator><pubDate>Sat, 04 Jul 2009 06:09:13 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 06:26:48 GMT]]></title><description><![CDATA[<p>Ist das bei deinem Beispiel reiner Zufall das, wenn weiß in Spiel ist, die<br />
Bedingung nicht erfüllt ist. Wenn ja, würde das die Sache vereinfachen.<br />
Oder ist bei irgend einer Farbe/Zweifarbenkombi die Bedingung auf jeden erfüllt oder nicht erfüllt?</p>
<p>Wenn da aber alle 32 = 2^5 Varianten abgefragt werden sollen, ist doch eine<br />
andere Lösung anzudenken.</p>
<p>MfG f.-th.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736942</guid><dc:creator><![CDATA[f.-th.]]></dc:creator><pubDate>Sat, 04 Jul 2009 06:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 07:37:51 GMT]]></title><description><![CDATA[<p>Enums + forschleife</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736947</guid><dc:creator><![CDATA[$4F]]></dc:creator><pubDate>Sat, 04 Jul 2009 07:37:51 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 07:50:30 GMT]]></title><description><![CDATA[<p>Mach ein Bitset mit den Farben und ein Bitset mit der Bedingung und verknüpf die beiden mit den entsprechenden logischen Operatoren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736948</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 04 Jul 2009 07:50:30 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 07:49:34 GMT]]></title><description><![CDATA[<p>Schreib dir halt ein Hilfsfunktion</p>
<pre><code class="language-cpp">bool isValid(bool filter, bool value) {
    if( value &amp;&amp; !filter ) return false;
    return true;
}
</code></pre>
<p>Und im Programm kannst du das dann auf 5 if's reduzieren:</p>
<pre><code class="language-cpp">FARBE filter;
FARBE aktuell;
// Farben mit Werten füllen
if( isValid( filter.red, aktuell.red ) &amp;&amp;
    isValid( filter.green, aktuell.green ) &amp;&amp;
    isValid( filter.blue, aktuell.blue ) &amp;&amp;
    isValid( filter.white, aktuell.white ) &amp;&amp;
    isValid( filter.black, aktuell.black ) {
    // Farben OK
    return true;
}
</code></pre>
<p>Bitweises UND wird auch nix bringen, da eben aktuell.$COLOR false sein darf, obwohl im Filter auf true steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736950</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Sat, 04 Jul 2009 07:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 07:57:29 GMT]]></title><description><![CDATA[<p>l'abra d'or schrieb:</p>
<blockquote>
<p>Bitweises UND wird auch nix bringen, da eben aktuell.$COLOR false sein darf, obwohl im Filter auf true steht.</p>
</blockquote>
<p>Habe ich auch gerade gemerkt (und schon editiert während du geantwortet hast). Die richtige Bedingung müsste, wenn ich die Aufgabenstellung richtig verstanden habe, lauten:</p>
<pre><code>(farbe AND bedingung) AND (NOT (farbe AND (NOT bedingung)))
</code></pre>
<p>Das kann man bestimmt noch irgendwie vereinfachen, aber dafür fühle ich mich gerade zu faul <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736955</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 04 Jul 2009 07:57:29 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 08:11:03 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig verstanden habe, ist Die Bedingung genau dann erfüllt, wenn im Objekt keine anderen Farben drin sind als die, die in &quot;bedingung&quot; gespeichert sind. Das könnte so aussehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

  const unsigned blue  =  1;
  const unsigned green =  2;
  const unsigned black =  4;
  const unsigned white =  8;
  const unsigned red   = 16;

  typedef unsigned farbe_t;

  inline bool has_blue (farbe_t c) {return c &amp; blue;}
  inline bool has_green(farbe_t c) {return c &amp; green;}
  // ....

  inline bool erfuellt(farbe_t objekt, farbe_t beding)  
  {
    return (objekt &amp; (~beding))==0;
  }

  int main() {
    farbe_t objekt = blue | red;
    farbe_t beding = blue | black | white;
    if (erfuellt(objekt,beding)) {
      std::cout &lt;&lt; &quot;Ja\n&quot;;
    } else {
      std::cout &lt;&lt; &quot;Nein\n&quot;;
    }
  }
</code></pre>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736957</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 04 Jul 2009 08:11:03 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 15:07:53 GMT]]></title><description><![CDATA[<p>Darf ich mal fragen, warum du eigentlich kein Enum benutzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737049</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Sat, 04 Jul 2009 15:07:53 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 15:11:26 GMT]]></title><description><![CDATA[<p>Ich wollts halt als struct haben, wobei jede Farbe von nem bool Wert repräsentiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737050</guid><dc:creator><![CDATA[Logigproblem]]></dc:creator><pubDate>Sat, 04 Jul 2009 15:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 16:07:07 GMT]]></title><description><![CDATA[<p>Logigproblem schrieb:</p>
<blockquote>
<p>Ich wollts halt als struct haben, wobei jede Farbe von nem bool Wert repräsentiert wird.</p>
</blockquote>
<p>das ging wahrscheinlich an Sebastian Pizer ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737077</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 04 Jul 2009 16:07:07 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 17:18:36 GMT]]></title><description><![CDATA[<p>FreakY&lt;3Cpp schrieb:</p>
<blockquote>
<p>Darf ich mal fragen, warum du eigentlich kein Enum benutzt?</p>
</blockquote>
<p>Aus keinem <em>besonderen</em> Grund. Es war eher eine Laune. Es gibt mit <code>enum</code> s einen Vorteil aber auch einen Nachteil:<br />
+ mehr Typsicherheit<br />
- expliziter Cast nötig wenn man &quot;Flags&quot; zusammensetzt</p>
<pre><code class="language-cpp">// Sei farbe_t ein enum
  // Beachte den notwendigen Cast:
  farbe_t objekt = farbe_t( blue | red );
</code></pre>
<p>Denn der Ausdruck <code>blue|red</code> ist vom Typ <code>int</code> , welcher sich nicht direkt einem <code>enum</code> zuweisen lässt. Das kann dann schon mal nerven.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737099</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 04 Jul 2009 17:18:36 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 17:29:12 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>FreakY&lt;3Cpp schrieb:</p>
<blockquote>
<p>Darf ich mal fragen, warum du eigentlich kein Enum benutzt?</p>
</blockquote>
<p>Denn der Ausdruck <code>blue|red</code> ist vom Typ <code>int</code> , welcher sich nicht direkt einem <code>enum</code> zuweisen lässt. Das kann dann schon mal nerven.</p>
</blockquote>
<p>Achso, noch etwas: Die &quot;Bit-Operatoren&quot; (in diesem Fall: &amp; | ~) sind nicht wirklich portabel bei vorzeichenbehafteten Ganzzahlen wie <code>int</code> .</p>
<pre><code class="language-cpp">assert( ~(-1) == 0); // gilt nicht auf jeder Maschine  
  // nur bei denen, die das Zweierkomplement benutzen
</code></pre>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737104</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 04 Jul 2009 17:29:12 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 17:44:52 GMT]]></title><description><![CDATA[<p>Weiß nicht, ob das erlaubt ist, aber man könnte die Operatoren ja für das <code>enum</code> überladen.</p>
<pre><code class="language-cpp">inline Color operator | (Color left, Color right)
{ 
	return static_cast &lt;Color&gt; (static_cast&lt;int&gt;(left) | right);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1737112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737112</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 04 Jul 2009 17:44:52 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sat, 04 Jul 2009 19:11:25 GMT]]></title><description><![CDATA[<p>Don06 schrieb:</p>
<blockquote>
<p>Weiß nicht, ob das erlaubt ist, aber man könnte die Operatoren ja für das <code>enum</code> überladen.</p>
</blockquote>
<p>Ja, das ist erlaubt.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737156</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 04 Jul 2009 19:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sun, 05 Jul 2009 02:16:06 GMT]]></title><description><![CDATA[<p>Der Code von l'abra d'or funtkioniert einwandfrei! DANKE <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737296</guid><dc:creator><![CDATA[Logigproblem]]></dc:creator><pubDate>Sun, 05 Jul 2009 02:16:06 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sun, 05 Jul 2009 07:09:51 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Aus keinem <em>besonderen</em> Grund. Es war eher eine Laune. Es gibt mit <code>enum</code> s einen Vorteil aber auch einen Nachteil:<br />
+ mehr Typsicherheit<br />
- expliziter Cast nötig wenn man &quot;Flags&quot; zusammensetzt</p>
</blockquote>
<p>Du könntest zunächst bloß deine selbstgebastelte <code>unsigned const</code> -Aufzählung in ein <code>enum</code> ändern und den Rest einfach so lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737314</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Sun, 05 Jul 2009 07:09:51 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sun, 05 Jul 2009 10:05:22 GMT]]></title><description><![CDATA[<p>Logigproblem schrieb:</p>
<blockquote>
<p>Der Code von l'abra d'or funtkioniert einwandfrei! DANKE <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Der Code von Sebastian Pizer ist aber viel kürzer.</p>
<p>Will auch noch meinen Senf dazugeben:<br />
Wenn die Farben definiert sind als</p>
<pre><code class="language-cpp">enum Color { blue = 1, green = 2, black = 4, red = 8, white = 16 };
</code></pre>
<p>dann kannst du eine Bedingung folgendermaßen erstellen:</p>
<pre><code class="language-cpp">Color condition = Color(black | white | blue);
</code></pre>
<p>Die Überprüfung geht dann so:</p>
<pre><code class="language-cpp">if(condition | object == condition)    // Wenn in condition keine Bits gesetzt sind, die nicht auch in condition gesetzt sind
    Farbe erfüllt die Bedingung
</code></pre>
<p>Damit ist das Portabilitätsproblem von Sebastian Pizer auch erledigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737375</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 05 Jul 2009 10:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to Logik Problem: Vermeidung von if Abfragen on Sun, 05 Jul 2009 11:00:56 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20068">@Michael</a> E.: Perfect! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Naja, strenggenommen benutzt Du die Bitweise-Oder-Verknüpfung immer noch auf <code>int</code> und nicht <code>unsigned int</code> . Aber die Zahlen, mit denen da hantiert wird, sind ja eh nicht negativ und die Bitmuster für Zahlen 0...32767 müssten dann alle gleich sein, egal ob die Maschine <a href="http://de.wikipedia.org/wiki/Zweierkomplement" rel="nofollow">Zweierkomplement</a>, <a href="http://de.wikipedia.org/wiki/Einerkomplement" rel="nofollow">Einerkomplement</a> oder <a href="http://en.wikipedia.org/wiki/Signed_number_representations#Sign-and-magnitude" rel="nofollow">Sign-Magnitude</a> als binäre Repräsentierung nutzt. Ich weiß jetzt gerade nicht, ob C++ noch etwas anderes zulässt. Wenn ja, könnte es sein, dass es immer noch nicht 100% portabel (vermute aber mal, dass es das ist).</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737400</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sun, 05 Jul 2009 11:00:56 GMT</pubDate></item></channel></rss>