bitweises XOR

Alles, was PHP betrifft, kann hier besprochen werden.

bitweises XOR

Postby rafael » 06. October 2009 15:08

ich versuch grad für eine verschlüsselung eine XOR funktion für 2 binärzahlen zu machen und hab gefunden dass das mit ($a ^ $b) geht
iwie gehts aber nich -.-
hab ich da was falsche gefunden oder liegt das an was anderem?

mfg rafael(schon ma danke fürs antworten)


ps:ich mein sowas in der richtung:
1011110 XOR 1000101 = 0011011
rafael
 
Posts: 70
Joined: 17. September 2008 17:06

Re: bitweises XOR

Postby Nobbie » 06. October 2009 15:57

rafael wrote:iwie gehts aber nich -.-
hab ich da was falsche gefunden oder liegt das an was anderem?


Es liegt an Dir und/oder an Deinem Script (welches Du uns leider nicht zeigst), bei mir funktioniert es einwandfrei.
Nobbie
 
Posts: 8770
Joined: 09. March 2008 13:04

Re: bitweises XOR

Postby rafael » 07. October 2009 15:58

naja da das ziemlich allgemein is dacht ich dass wär nich nötig zu zeigen aber hier:

Code: Select all
$a = 1101001; $b = 0101010;
$y = ($a ^ $b);
echo $y;


muss man da noch iwie festlegen dass in dem bereich alles im dualsystem is oder wie? weil sonst fällt mir da iwie nichts auf :?
rafael
 
Posts: 70
Joined: 17. September 2008 17:06

Re: bitweises XOR

Postby Xardas der Dunkle » 07. October 2009 17:37

Man kann in PHP nicht direkt Dualzahlen schreiben. Vor allem nicht so. Woher soll PHP wissen das es sich um eine Binärzahl handelt?

Um deinen Code mal auf zu dröseln was PHP daraus machen würde:
Code: Select all
$a = 1101001; // Dezimalzahl wird auch so behandelt
$b = 0101010; // Führende 0 daher wird diese Zahl als Oktalzahl interpretiert: dez. 33288
$c = 0x0101010; // Hexadezimale-Zahl: dez. 1052688
$d = bindec('1101001'); // Währe die Binärezahl: 1101001: dez. 105 
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Re: bitweises XOR

Postby Nobbie » 07. October 2009 19:04

rafael wrote:muss man da noch iwie festlegen dass in dem bereich alles im dualsystem is oder wie?


Genau so etwas habe ich mir gedacht - Du weißt nicht, was Dualzahlen sind, was Integer sind, wie Zahlen dargestellt werden und wie man sie umrechnet.

Ich zeige Dir mal mein Testscript, wie ich Deine Nachfrage überprüft habe. In der Hoffnung, dass Du es verstehst und lernst, wie man mit PHP Strings und Integers verarbeitet:

Code: Select all
<?php
   $bin_a = '1011110';
   $bin_b = '1000101';

   $dec_c = bindec($bin_a) ^ bindec($bin_b);
   $bin_c = sprintf('%07b', $dec_c); // decbin() kennt keine Formatierungen und unterdrückt führende Nullen

   echo $bin_a.' ^ '.$bin_b.' = '.$bin_c;
?>
Nobbie
 
Posts: 8770
Joined: 09. March 2008 13:04

Re: bitweises XOR

Postby rafael » 08. October 2009 14:22

@Xardas: also wenn ich einer zahl voran ein 0x setze wird sie automatisch als hexadezimal interpretiert und dann auch alle rechenoperationen entsprechend durchgeführt?

@Nobbie: ich hab vielleicht nicht viel ahnung von programmieren aber in mathe und mit zahlensystemen kenn ich mich schon aus
dachte bloß dass php die zahlen als binär erkennen würde(ok hätt mir schon denken können dass das nichts wird aber naja ich lern halt noch...)
ok das script hab ich auch soweit verstanden(sofern ich dass einschätzen kann^^)

aber was mich gewundert hat, dass bei mir gar keine ausgabe kam; lag dass daran dass ich praktisch eine dezimal und eine oktalzahl XOR verknüpft hab?


edit: ich habs jetzt mal mit den werten 11 für $a und 101 für $b probiert
und jetzt kommt auch 110 als ausgabe das klappt aber nur wenn php die variablen jetzt doch als dualzahlen erkennt
ich bin verwirrt

Code: Select all
$a = 11; $b = 101;
$y = ($a ^ $b);
echo $y;

wie gesagt jetzt wird 110 ausgegeben
rafael
 
Posts: 70
Joined: 17. September 2008 17:06

Re: bitweises XOR

Postby Wiedmann » 08. October 2009 14:52

@Xardas: also wenn ich einer zahl voran ein 0x setze wird sie automatisch als hexadezimal interpretiert

Yup. Wie es ja im Manual beschrieben ist.

und dann auch alle rechenoperationen entsprechend durchgeführt?

Es wird beim Rechnen meist nach Int konvertiert, damit gerechnet, und ein Int zurückgegeben (und Hex/Oktalzahlen sind ja ganze Zahlen).

dachte bloß dass php die zahlen als binär erkennen würde

Quizzfrage:
$x = 11;

$x ist jetzt (int) 3 oder (int) 11?

Code: Select all
$a = 1101001; $b = 0101010;
$y = ($a ^ $b);
echo $y;

aber was mich gewundert hat, dass bei mir gar keine ausgabe kam

Ein PHP Script beginnt mit "<?php" und endet mit "?>". Ansonsten gibt dir das den Integer 1068737 aus. Oder Binär:
Code: Select all
100001100110011001001 Xor 1000001000001000            = 100000100111011000001
(int)1101001              (okt)0101010 = (int)33288     (int)1068737 
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: bitweises XOR

Postby Nobbie » 08. October 2009 15:05

rafael wrote:
Code: Select all
$a = 11; $b = 101;
$y = ($a ^ $b);
echo $y;

wie gesagt jetzt wird 110 ausgegeben


Was ja auch stimmt, aber nur zufällig "suggeriert", dass PHP Dualzahlen erkennt. Stelle 11 als Binärzahl dar (= 1011), ebenso 101 (= 1100101), mache ein bitweises XOR (1011 xor 1100101 = 1101110) und rechne es um in INTEGER 1101110 = (int) 110.
Nobbie
 
Posts: 8770
Joined: 09. March 2008 13:04

Re: bitweises XOR

Postby rafael » 08. October 2009 16:57

aso ja hatte vergessen dass wieder umzurechnen -.- (muss aber auch genau bei dem beispiel funktionieren dass ich mir aussuche)


@Wiedmann: ich hatte den code aus einer test-seite herauskopiert dass man das in <?php ?>
setzen muss is mir schon klar ;)
Quizzfrage:
Quote:
$x = 11;
$x ist jetzt (int) 3 oder (int) 11?
(hab doch schon gesagt dass ich mir dass hätte denken können :cry: )
Es wird beim Rechnen meist nach Int konvertiert, damit gerechnet, und ein Int zurückgegeben (und Hex/Oktalzahlen sind ja ganze Zahlen).

:? aber es wird als ergebniss ne hex/oktalzahl ausgegeben oder?


ps: könnt ihr mir noch ne gute seite zum php lernen emfehlen? weil irgenwie merk ich immer wieder dass da noch so einiges fehlt :cry:
rafael
 
Posts: 70
Joined: 17. September 2008 17:06

Re: bitweises XOR

Postby Xardas der Dunkle » 08. October 2009 17:08

:? aber es wird als ergebniss ne hex/oktalzahl ausgegeben oder?

Nein. Es wird eine Dezimalzahl ausgegeben. Wenn du Hex/Oktal/Binär haben willst musst du aus der Zahl einen entsprechenden String machen.
Helfen tun dir dabei:
http://de3.php.net/manual/de/function.sprintf.php
http://de3.php.net/manual/de/function.dechex.php
http://de3.php.net/manual/de/function.decoct.php
http://de3.php.net/manual/de/function.decbin.php
http://de3.php.net/manual/de/function.base-convert.php
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Re: bitweises XOR

Postby Wiedmann » 08. October 2009 17:52

aber es wird als ergebniss ne hex/oktalzahl ausgegeben oder?

Wiedmann wrote:und ein Int zurückgegeben

Das Ergebnis einer Rechnung mit Integern ist ein Integer (oder bei PHP notfalls auch ein Float).

In welcher Form du das Ergebnis einer Berechnung mit echo (als String) ausgeben lässt, liegt dann an dir. Ohne weitere Vorkehrungen ist das halt ein Int, da eben das Ergebnis der Berechnung ein Int ist.
-> Es wird ja vor der Berechnung alles in einen Int gewandelt, also kommt das raus. Angenommen, du addierst eine Hex mit einer Oktalzahl, was sollte PHP dann noch deiner Lesart ausgeben?

ps: könnt ihr mir noch ne gute seite zum php lernen emfehlen?

Das was jetzt schon Xardas gepostet hat. Das PHP-Manual. Da gibt es zu jedem Punkt Beispiele die man einfach mal nachmachen kann (und Verstehen was im Beispiel passiert).

In deinem Fall, um zu erkennen was eine Variable für einen Wert enthält, kann man dir auch die Funktion var_dump() nahelegen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: bitweises XOR

Postby rafael » 09. October 2009 15:00

ok vielen dank für eure antworten und vor allem für eure geduld ;)

mfg rafael
rafael
 
Posts: 70
Joined: 17. September 2008 17:06


Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests