타일 맵의 타일 위에 사각형을 만드는 프로그램을 만들려고합니다. 타일은 64 x 64입니다. 마우스의 좌표를 가져와 가장 가까운 64의 배수로 반올림하고 타일 좌표를 얻기 위해 64로 나눌 필요가 있다고 생각했습니다. 더 좋은 방법이 있습니까? 모든 타일 버튼을 만들어야합니까? 감사! 다음과 같이숫자를 가장 가까운 64의 배수로 반올림하는 방법
3
A
답변
7
이 작업을 수행 할 수 있습니다 다음과 같이
int number = 445226;
int roundoff = (number+0x20)&(~0x3f);
의미가 있습니다 : 그것은/아래로 반올림되도록
- 먼저 수를
32
(0x20
)를 추가합니다. 즉,32
아래의 값은64
보다 작고32
보다 큰 값은64
보다 큰 값이됩니다. - 마지막 6 비트를 마스크 처리합니다.
일반적으로 비트 단위 연산은 나누기 및 곱셈보다 빠릅니다. 그리고 2의 거듭 제곱을 요구하기 때문에 사용할 수있는 멋진 성능 해킹입니다.
타일 좌표에 관심이 있다면 64
으로 다시 곱할 필요가 없습니다. 항상 mutliple 답변이 올로, 사용자 인터페이스에 대한
int number = 445226;
int div64 = (number+0x20)>>0x06; //this is divided by 64, not rounded
,하지만 당신이 그것에지도의 어떤 종류를 칠려고하는 경우에, 나는 좌표가 버튼보다 더 추측 :이 경우 당신은 사용할 수 있습니다. 특히 프로세스의 후반부에 사람들은지도에서 두 개의 버튼 사이에있는 항목을 클릭 할 수 있습니다. 양의 정수에 대한
2
:
int m64 = 64 * ((n + 32)/64);
이상 공상 (64)는 2의 거듭 제곱 될 일이 있기 때문에 다음은
int m64 = ((n + 32) >> 6) << 6;
관련 문제
- 1. 특정 숫자의 배수로 반올림하는 방법 JavaScript?
- 2. JS에서 오프셋이있는 가장 가까운 배수로 반올림
- 3. Javascript에서 X의 가장 가까운 배수로 항상 반올림하는 방법은 무엇입니까?
- 4. 네번째 가장 가까운 반올림하는 방법
- 5. 소수점을 가장 가까운 1/n로 반올림하는 방법
- 6. 가장 가까운 x 증분 값까지 숫자를 반올림하는 방법
- 7. C# 기하학적 시퀀스에서 가장 가까운 숫자를 반올림하는 방법
- 8. 다른 숫자의 가장 가까운 부분으로 반올림하는 법?
- 9. 플로트를 가장 가까운 쿼터로 반올림하는 방법
- 10. DateTime을 가장 가까운 기간으로 반올림하는 방법
- 11. x- ticklabels를 가장 가까운 값으로 반올림하는 방법
- 12. 부동 소수점을 가장 가까운 숫자로 반올림하는 방법
- 13. double 값을 가장 가까운 정수로 반올림하는 방법
- 14. VBA에서 가장 가까운 백으로 숫자를 반올림하는 방법은 무엇입니까?
- 15. Ruby 2.0 - 10의 가장 가까운 배수로 정수 반올림
- 16. 파이썬에서 가장 가까운 낮은 플로트로 반올림하는 법?
- 17. VBA : 가장 가까운 숫자의 배수로 반올림
- 18. 플로트를 n의 가장 가까운 배수로 반올림하려면 어떻게해야합니까?
- 19. 가장 가까운 숫자를 반올림하십시오.
- 20. 부동 소수점 수와 함께 주어진 인수 중 가장 가까운 배수로 반올림하는 방법은 무엇입니까?
- 21. 라운드 나는 다음과 JS가 있다면 내가 그래서 예를 들어 (250)의 다음 가장 가까운 배수로 숫자를 반올림하는 방법을 찾고 있어요
- 22. Silverlight에서 가장 가까운 백분율로 숫자를 반올림하십시오.
- 23. float number를 가장 가까운 int number로 반올림하는 방법은 무엇입니까?
- 24. (가장) 10에 가까운 시간을 반올림하는 방법은 무엇입니까?
- 25. PHP에서 가장 가까운 유효 숫자로 반올림하는 법
- 26. Excel : 숫자를 가장 가까운 ten2로 모으는 방법?
- 27. NSNumberFormatter를 사용하여 숫자를 반올림하는 방법
- 28. 소수 자리에서 숫자를 반올림하는 방법
- 29. 숫자를 범위 내로 반올림하는 방법
- 30. C : 숫자를 항상 반올림하는 방법
는 64으로 나누면, 당신은 그것을 반올림해야합니다. 그리고 '64 '에 의한 구분은 다음과 같이 쉬프트함으로써 더 효율적으로 수행 될 수 있습니다. –
왜 그가 그것을 반올림해야합니까? 정수 연산이 가장 가까운 단위로 반올림되지 않습니까? – JClassic
@ JClassic no. 가장 가까운 정수로 반올림하지 않는 '9/10 -> 0'과 같은 'floor()'를 호출하는 것과 같은 정수 연산 * trucates *가 나눗셈 결과 아래의 다음 정수. – Bohemian