왜 C에서 데이터 정렬을 위해 다음 매크로가 작동하는지 알고 싶습니까? #define CMIALIGN(x,n) (size_t)((~(n-1))&((x)+(n-1)))
n이 7 일 경우 다음 매크로가 작동하는 이유는 무엇입니까? #define ALIGN8(x) (size_t)((~7)&((x)+7)
. 몇 가지 예를 들어 보여 주시고이 공식이 왜 효과가 있는지 말씀해 주시겠습니까? 데이터 정렬을위한 다른 유형의 수식이 있습니까?C에서 데이터 정렬을 수행하는 방법?
1
A
답변
2
의 목적 ~N
, 이미 모든 상위 비트를 확인하기 위해 수의 존재 (N은 하나없는 당신이 찾는 정렬보다 임) 제대로되어 는이 밀어 비트를 포함, 정렬 후 조명 유지 거기에 추가 작업을합니다. 정렬을위한 실제 올림은 N
의 추가로 수행됩니다. 이렇게하면 올바른 자리 올림 비트가 더 높은 비트 위치로 푸시됩니다. ~N
의 비트 AND는 맨 아래 비트가 스윕되는 것을 보장하면서 보장됩니다 , 그들이 필요하지 않기 때문에.
이 상상 :
00100011 : 35
+ 00000111 : 7
-------- ----
00101010 : 42
& 11111000 : ~7
---------- ----
00101000 : 40
또 다른 예 :
11101111 : 239
+ 00000111 : 7
-------- ----
11110110 : 246
& 11111000 : ~7
-------- ----
11110000 : 240
그리고를 마지막으로, 이미 정렬로, 아무것도하지 않고 끝 예는 :
10100000 : 160
+ 00000111 : 7
-------- ----
10100111 : 167
& 11111000 : ~7
-------- ----
10100000 : 240
내가해야 호출자 측에서 0이 아닌 값을 확인하는 것 이외에 오버플로를 방지 할 수는 없습니다. ch는 분명히 반올림 정렬 값으로 사용하려는 것이 아닙니다.
11111110 : 254
+ 00000111 : 7
-------- ----
00000101 : 5 (of)
& 11111000 : ~7
-------- ----
00000000 : 0
관련 문제
- 1. 코드에서 목록보기 정렬을 수행하는 방법?
- 2. GPU에서 픽셀 정렬을 수행하는 방법
- 3. kmalloc과의 데이터 구조 정렬을 수행하는 방법은 무엇입니까?
- 4. 데이터 정렬을 비활성화하는 방법
- 5. usort를 사용하여 PHP에서 자연 정렬을 수행하는 방법
- 6. 포인터를 사용하여 버블 정렬을 수행하는 방법
- 7. ADF 또는 Java에서 영숫자 정렬을 수행하는 방법
- 8. 두 값에 대해서만 배열 정렬을 수행하는 방법
- 9. VB6 - MSFlexGrid로 다중 레벨 정렬을 수행하는 방법?
- 10. 영숫자 문자열에 "파일 캐비닛"정렬을 수행하는 방법
- 11. Ember.js에서 _fast_ 테이블 정렬을 수행하는 방법?
- 12. 내 경우 수직 정렬을 수행하는 방법
- 13. dense_rank 내에서 중첩 된 정렬을 수행하는 방법
- 14. c에서 hex8 인코딩을 수행하는 방법?
- 15. C에서 회전 교대를 수행하는 방법
- 16. C에서 데이터 읽기 및 전처리를 더 빨리 수행하는 방법
- 17. 데이터 정렬을 사용하여 DB2 쿼리
- 18. C에서 변환을 수행하는 Pdf #
- 19. 데이터베이스의 데이터 정렬을 변경해야합니까?
- 20. C에서 64 비트 쓰기를 수행하는 방법?
- 21. Objective-C에서 이미지 뺄셈을 수행하는 방법
- 22. 객관적인 C에서 nsarray의 필터링을 수행하는 방법
- 23. C에서 시간 기록기 클래스 래퍼를 수행하는 방법
- 24. 객관적인 C에서 게으른 인스턴스 생성을 수행하는 방법?
- 25. C에서 함수 - 구성 요소 관계를 수행하는 방법
- 26. 순수 C에서 정규식 문자열 바꾸기를 수행하는 방법?
- 27. C에서 조건부 함수 호출을 수행하는 방법?
- 28. 데이터 테이블에 서버 측 정렬을 구현하는 방법
- 29. SQL Server 데이터베이스의 데이터 정렬을 선택하는 방법
- 30. MySQL의 연결 데이터 정렬을 변경하는 방법
종이에 비트를 긋고 각 단계의 효과를 확인 했습니까? – WhozCraig