Flutter
dartpad에서 bitwise not, 비트연산자 not 동작이 이상한이유
인생마린
2022. 10. 26. 14:22
반응형
??? 분명 not 연산자는 ~x = -x - 1 즉 -6이라는 결과이어야 하는데 42억이라는 이상한 결과를 뱉는다
도저히 저 숫자가 나오는 원인을 알수가 없었다
그래서 구글링을 통해 유튜브 댓글로 원인을 알게되는데..
원래 다트에서 int 자료형은 64비트이다. 그런데 dartpad에서 dart코드를 js코드로 전환하며 32비트 자료형으로 not연산을 진행하는데, dart에서 int는 64비트이므로 출력할때 64비트로 출력한다.
고로 1010 5라는값이 16진수로 표현하면
0x0000 0005(32비트)
이걸 뒤집으면
0xFFFF FFFA(32비트)
맨앞에 비트가 양수인지 음수인지 판단을 하므로 이걸 그대로 출력하면 -6이 된다
but 이 결과값을 64비트로 출력하면?
0x0000 0000 FFFF FFFA(64비트)
맨앞에 비트가 0이되며 양수가 되버린다
해당 결과를 보면 정확히 0101을 잘 반전한걸 알 수 있다.
비트연산 동작에는 문제가 없었지만 자료형의 크기차이로 생긴 버그였다.
DartPad가 아닌 Dart나 Flutter에서는 실제로 잘 동작한다.
반응형