• Home
  • About

szehau's weblog

Life, Internet, Software, Gadgets, Programming and Investments

  • life log
  • internet
  • programming
  • software
  • working holiday
  • gadget
  • project

PHP integer and float

I found a problem while trying to do some bitwise operations (e.g. 32 bits XOR) in PHP. Consider the following case:


$a = -3036738507; // stored in float type
$b = 98758; // stored in integer type
$c= ($a & 0xFFFFFFFF) ^ $b;

Note: In PHP, if you specify a number beyond the bounds of the integer type, it will be interpreted as a float instead.

When I run the code in Windows, it gives me the correct value: $c = 1258196467. But when I run the code in Linux, it gives me the incorrect value: $c = -2147384890 (it seems like an integer overflow).

4AFF0C35 ^ 181C6 = 4AFE8DF3

Is this a bug in PHP? I tried shift bits and type casting, it doesn’t give me the corrent answers in Linux.


$t1 = ($a>>24) & 0xFF; $t2 = ($a>>16) & 0xFF; $t1 = ($a>>8) & 0xFF; $t1 = ($a>>0) & 0xFF;
$a = ($t1< <24) | ($t2<<16) | ($t3<<8) | ($t4<<0); $c= $a ^ $b;

and


$c= ((int)$a) ^ $b;

Anyway, I have a quick solution for it:


function cvt32($a) {
$maxInt = (float)(0xFFFFFFFF +1);
$temp = round ($a / $maxInt);
$out = $a - $temp * $maxInt;
return (int) $out;
}
$a = -3036738507; // stored in float type
$b = 98758; // stored in integer type
$c= cvt32($a) ^ $b;

The function cvt32() above takes 32 bits (least significant bits) from the float and return it as a integer so that PHP can do 32 bits bitwise operation correctly.

About Sze Hau

Geek. Love programming. Coffee addicted. Married with a child. Working towards financial freedom.

Email News Letter

Sign up to receive updates daily and to hear what's going on with us

More Posts

5 Essential Things You Need To Have At Your Home During The COVID-19 Pandemic

June 1, 2021 22:15 By Sze Hau

LED Downlight

Troubleshooting A Flickering LED Downlight

February 13, 2016 00:29 By Sze Hau

Repair A Broken iPhone Lightning Cable

January 30, 2016 00:54 By Sze Hau

Blog Network

  • Personal Fincance Personal Finance – Personal Money Tips, Stock Investment, Small Business and Make Money Online
  • Snippet IT Information technology news, ideas and experiences and opinions

Recent

  • 5 Essential Things You Need To Have At Your Home During The COVID-19 Pandemic
  • Troubleshooting A Flickering LED Downlight
  • Repair A Broken iPhone Lightning Cable
  • New Gadget – MacBook Pro with Retina Display (2015)
  • One Watt LED Night Light

Search

Tags

2014 adsense advertisement Arduino baby blog blogtal Canon EOS 400D Chinese New Year Christchurch CNY DiGi DIY electronic FBM Flickr Flickr Uploadr Google Google Maps Google Search Results Google Webmaster Central investment joke KLCI KLSE Lake Tekapo LED MacBook Air Maybank2u Motueka movie mutual funds New Zealand PC Fair 2009 Queenstown restaurant for dinner sharing stock trackback Twitter unit trust visa wordpress wordpress plugin working holiday