에서 다른 결과를 제공합니다. 연습을 위해 Java 및 Python으로 방송 IP 주소 코딩을 시도하고 있습니다. - 그 마스크를 나타내는 숫자 여기 decimalIP
자바와 파이썬은 논리 연산자
public IPv4Address getBroadcastAddress() throws IllegalArgumentException {
long bits = 0;
bits = this.address.decimalIP()^(~(0xffffffff^(1L << 32 - getMaskLength()) - 1));
IPv4Address broadcast = new IPv4Address(bits);
return broadcast;
}
는 IP 주소, getMaskLength
를 나타내는 숫자입니다 : 여기 나에게 정확한 출력을 제공 자바 내 코드입니다. 여기에 예상 방송 주소가 있습니다. 모든 구성 요소가 자바와 같은 항목을 나타내는 다음
def broadcastaddress(self):
return IPv4Address(self.address.decimalip^(~(0xffffffff^(1 << 32 - self.mask) - 1)))
: 파이썬에서 같은 논리를 사용하여 나는 예기치 않은 결과를 얻었다. 디버깅 후 그 숫자가 (~(0xffffffff^(1 << 32 - self.mask) - 1))
이 부정적입니다. 문서 연산자에서 ~
비트 반전을 제공하지만 왜 파이썬이 아닌 Java에서이 숫자가 음수인지 이해할 수 없습니까?
나는 모든 호출을 제거하고 Java 및 Python의 각각의 짧고 완전한 프로그램에 값을 하드 코딩하는 것으로 시작합니다. 그런 다음 각 단계를 별도의 명령문으로 만드십시오. 그러면 어떤 동작이 다른 동작을하는지 정확하게 볼 수 있습니다. –
자바에서는 (~ (0xffffffff^(1L << 32-getMaskLength()) -> 1) ~ = ~ (1L << 32-getMaskLength()) - 1)) – sol4me
@ sol4me : '(1L << 32-getMaskLength()) - 1)'과 같은 것을 돌려줍니다. 그리고 하나는 2의 보수가 아닌 하나의 보수를 사용해야합니다. –