Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

bit manipulation - PHP Bitwise NOT

I need to pack a number in 1byte (char), 2 bytes (short), 4 bytes (int) and 8 bytes (long) formats and apply bitwise operator ~ (not). For these needs I use "pack" function, but faced with a problem with 8 bytes format. Consider code below:

$num = 1;
$format = "C"; // C, v, V, P
$binary_num = pack($format, $num);
$inv_binary = ~$binary_num;
$unpack_num = unpack($format, $inv_binary)[1];
echo ($unpack_num);

When $format is "C", "v" or "V" I get expected values: 254, 65534, 4294967294. But when I use "P" (long 8 bytes little endian) format I get -2 instead of 18446744073709551614. Can someone explain why this happens?

P.S. 64 bit machine PHP 7.4, 8.0

Online sandbox: https://sandbox.onlinephpfunctions.com/code/35bf7ffd4e50096c5cfe52901003ffe3b0e97d2d


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...