php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #6260 xor operator not working correctly
Submitted: 2000-08-20 09:44 UTC Modified: 2001-05-13 05:32 UTC
From: fredrik at devibe dot net Assigned:
Status: Closed Package: Scripting Engine problem
PHP Version: 4.0.1pl2 OS: Linux RedHat 60
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: fredrik at devibe dot net
New email:
PHP Version: OS:

 

 [2000-08-20 09:44 UTC] fredrik at devibe dot net
I Compiled php with MySQL and apxs.

php.ini shouldn't be relevant. It was not included in the install (btw. why?) and I've only created one with only session related stuff.

I found this thing on a newsgroup, alt.php, a new group not yet found on many servers, but you *can* find it on news.cis.dfn.de. The thread is named "a little maths problem", started 08/15/00 11:07.

I've considered it for some time now, and I can't find any explanation:
the code snippet
<?php
$val = 2634023077 ^ 407240870;
echo $val;
?>
outputs "-1740242778".

This can't to my knowledge be correct. I mean, 2634023077 would normally be an unsigned integer, but I haven't found any way to specify signed/unsigned integers. In addition, the answer should be 2235957251, and -1740242778 is not the signed representation of that number.

  1001 1101 0000 0000 0000 0000 1010 0101  -  2634023077
^ 0001 1000 0100 0110 0000 0000 1010 0110  -  0407240870
= 1000 0101 0100 0110 0000 0000 0000 0011  -  2235957251

The result from an xor operation performed on these two integers in php is
-1740242778. 1740242778 (positive) is in binary:
0110 0111 1011 1001 1111 1111 0101 1010

Then the negative representation should be (negating each bit and "adding" one):
1001 1000 0100 0110 0000 0000 1010 0110

which unsigned is 2554724518, not 2235957251.

All this taken into consideration, is this a bug/flaw or am I wrong?


--Fredrik de Vibe

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2000-08-20 09:50 UTC] stas@php.net
PHP integers are signed longs. If you want to go outside signed long, you should use bcmath library.

I do not close it since PHP has showed some very strange behaviour on large numbers, which might be useful to investigate and decide what to do.
 [2001-05-13 05:32 UTC] derick@php.net
This is not a bug in PHP, so closing.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 19 13:01:27 2024 UTC