는, 다음과 같은 코드가 올바른 결과 자바 스크립트 (Node.js를)에서 (-18027917)조로 파이썬 2.7에서
from __future__ import print_function
def twos_comp(val, bits):
if (val & (1 << (bits - 1))) != 0:
val -= 1 << bits
return val
valBinary = "110111011001110101001110011"
print(twos_comp(int(valBinary, 2), len(valBinary)))
를 반환하는 다음과 같은 코드를 파이썬/자바 스크립트 다른 결과를 보완 코드는 잘못된 결과 (1995238003)
function toTwosComplement(val, bits) {
if ((val & (1 << (bits - 1))) != 0) {
val -= (val - 1) << bits;
}
return val;
}
valBinary = "110111011001110101001110011"; // same as python example
console.log(toTwosComplement(parseInt(valBinary, 2), valBinary.length));
,691,363을 반환210
분명히 비트 연산자 (또는 int/parseInt)의 동작에 다른 점이 있지만 그 코드가 무엇인지 알 수는 없습니다.
'val'과 'bits'에 대해 올바른 값을 전달하면 결과가 변경됩니까? 이렇게하면'parseInt'가 원인으로 배제되어'toTwosComplement'가 남습니다. – delnan