2016-06-16 12 views
0

일부 코드를 검사 할 때 비트 연산 (| 0)에 관한 계산이 잘못되었습니다. '| 0'0 비트로 OR 비트 연산을 사용하는 이유를 방황

첫째, 왜 특별한 이유가 있는지 궁금합니다 (A * 나)와 같은 두 숫자를 계산 한 후 사용 | 0

을 두 번째로, 아래의 경우에, 나는 결과를 얻을 것으로 예상 220050이지만 결과는 220049입니다. 왜 내가이 결과를 얻었는지 아십니까?

importPackage (java.io); importPackage (java.lang); |0

var a = 164.700; 
var b = 1500; 

var result = (a*b)|0; 


System.out.println(result); 
+0

출력이'falsey' 인 경우 'OR' 값을 고려하십시오. – Rayon

답변

1

제로쪽으로 반올림하여 32- 비트 정수 값으로 변환한다. 곱셈의 결과는 숫자가 내부적으로 바이너리로 저장되기 때문에 정수보다 약간 작습니다. 동일한 이유로 대부분의 소수를 정확하게 2 진수로 나타낼 수 없습니다. 1/3은 유한 한 십진수로 정확하게 쓸 수 없습니다. 소수점 이하 자릿수. 164.7은 164.699999999998863131622783839702606201171875로 나옵니다.