문제

코드는 다음과 같습니다.

echo sprintf('%u',-123);

그리고 이것은 32 비트 플랫폼의 출력입니다.

4294967173

그러나 64 비트 :

18446744073709551493

동일하게 만드는 방법? int (10)가 서명되지 않은

도움이 되었습니까?

해결책

echo sprintf('-%u',abs(-123));

또는

$n = -123;
echo sprintf("%s%u", $n < 0 ? "-":"", abs($n));

실제로 두 사람의 보완 부호없는 값을 32 비트로 제한하는 것을보고 싶다면 다음과 같습니다.

echo sprintf("%u", $n & 0xffffffff);

그리고 그것은 인쇄 할 것입니다 4294967173 모든 시스템에서.

다른 팁

내 대답을 확인하십시오 이 질문 일부 아이디어의 경우 - 간단히 말해서, 64 비트 플랫폼에서 다른 처리를 수행하려면 php_int_size 상수의 값을 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top