저는 C와 함께 작업 중이며 32 비트 부호없는 정수에서 비트 세트를 변경하는 방법을 알아 내려고하고 있습니다. 내가 진에서부호없는 int에서 바이트 그룹을 수동으로 변경
int a = 17212403u;
이있는 경우 예를 들어
는 그 1000001101010001111110011
된다. 자, 내가이 비트들을 리틀 엔디안 포맷으로 배열했다고 가정하면, 최대한 오른쪽 비트가 1을 나타내는 것과 2 번째가 오른쪽을 2 등인 것처럼 어떻게 비트 그룹을 수동으로 변경할 수 있습니까?
예를 들어, 11 번째 비트에서 15 번째 비트에 십진수 17이되도록 비트를 변경하려고한다고 가정합니다. 어떻게 가능합니까?
unsigned int range = (a << (sizeof(a) * 8) - 14) >> (28)
을하지만 어디에서에 갈 확실하지 않다 :
나는 같은 수행하여 그 범위를 점점 생각했다.
'int a = 17212403u;'는 _unsigned_ 값을 _signed_ 변수에 할당합니다. 시프트를 확실히 수행하는 것은 부호없는 변수 및 상수를 고수하는 것이 훨씬 덜 문제입니다. 'unsigned a = 17212403u; – chux
17이 10001B라고 생각하십시오. 비트 11-15도 5 비트이므로 적합 할 것입니다. 먼저, NOT (11111B << 11)의 마스크와 AND 연산을하여이 비트들을 강제로 낮추십시오. 그런 다음 17 개를 11 개 위로 이동하고 또는에 넣습니다. –
비트 "주문"에는 리틀 및 빅 엔디안이 적용되지 않습니다. 비트는 개별적으로 주소 지정이 가능하지 않으므로 더 낮은 주소에 호소 할 개념이 없습니다. 그러나 little-endian * byte * 정렬은 "가장 왼쪽"바이트 (가장 낮은 주소를 가진 바이트)가 저 순서 끝에 있다는 것을 의미합니다. "리틀 엔디안"이 의미하는 것과는 반대입니다 . – rici