ava*_*sin 1 php bit-manipulation
我试图执行以下代码并得到奇怪的结果:
echo ~1; // gives -2
echo ~2; // gives -3
Run Code Online (Sandbox Code Playgroud)
也许有一点,描述数字是正还是负?
没有神奇或奇怪的输出,但它来自否定的定义
十进制数的按位补码是数字减1的否定
它来自手册: -
将负十进制数(即:-3)转换为二进制需要3个步骤: -
1)将十进制数的正数转换为二进制数(即:3 = 0011)
2)翻转位(即:0011变为1100)
你可能想知道1101 = -3是怎么回事.PHP使用方法"2的补码"来呈现负二进制数.如果最左边的位是1,那么二进制数是负数,你翻转这些位并加1.如果它是0那么它是正数而你不需要做任何事情.所以0010将是正数2.如果它是1101,则它是负数,你将这些位翻转为0010.加1,你得到的0011等于-3.