2013-10-07 2 views
0

값을 삽입하려면 마스크를 사용하여 주어진 색상 채널에 해당하는 픽셀의 8 비트를 지우십시오. 예를 들어, 빨강의 경우 16 비트 왼쪽의 8 비트 마스크를 이동하고 (~ 연산자를 사용하여) 반전하고 "and"(&)이 마스크를 RGB 값과 함께 사용하면 8 비트가 지워집니다 빨강의 다른 비트를 변경하지 않고 남겨 둡니다. 그런 다음 매개 변수 값 (이 경우 빨간색)을 동일한 비트 수 (빨간색의 경우 16)로두고 시프트 된 값을 픽셀 값으로 "or"(|) 이동하십시오.비트 쉬프트 java

int getRed(){ 
    red = (Pixel>>16); 
    red = ~Pixel; 
    red = Pixel<<16 | Pixel; 
    return red; 
} 

지시 사항에 따라 내가 뭘 잘못하고 있니?

+3

다음 작업에서'red' 값을 다시 사용해야합니다.'red'는'Pixel'의 어떤 연산에서 항상 할당되기 때문에, 당신은 3 개의 연산을 누적하지 않고 단지 3 개의 독립적 인 연산을 수행합니다. – jtahlborn

+3

세 가지 다른 값을 "red"에 지정합니다. 첫 번째와 두 번째 결과는 세 번째 결과와 겹치기 때문에 얻을 수있는 유일한 결과입니다. –

답변

2

문제는 할당이 작동하는 방식을 이해하는 데있어 근본적인 문제인 것으로 보입니다 (Java에서는 ... 모든 명령형 프로그래밍 언어에 대해!).

red = (Pixel>>16); 
red = ~Pixel; 

말한다 : 예를 들면

  1. 할당 Pixel 값이 부정 비트를 할당 red 16 비트

  2. 시프트 Pixelred한다. 이 은 이전 단계에서 계산 한 red의 값인입니다. 당신이 1 단계에서 계산 된 값을 부정하려는 경우

, 당신은이 작업을 수행 할 필요가 :

red = ~red; 
1

난 당신이 단순히 무슨 일이 일어나고 있는지 이해가 안 믿습니다. 아주 첫 번째 줄은 이미 잘못되었습니다 :

"빨간색의 경우 16 비트 왼쪽으로 8 비트 마스크를 이동하고 ~ 연산자를 사용하여 반전하고"및 "(&)

8 bit mask of ones: 0xFF (00000000 00000000 00000000 11111111) 
shift left 16 bits: 0xFF << 16 (giving you 00000000 11111111 00000000 00000000) 
invert it   : ~ (0xFF << 16) (giving you (11111111 00000000 11111111 11111111) 
& this mask with RGB value: result = pixel & (~(0xFF << 16)) 

result 수단 RGB 값 "

이 마스크가 삭제 17 24 비트와 pixel이다.

첫 번째 단계 (예 후속 단계가 숙제에 설명 된대로이있다)가 당신의 의도입니다하지만 당신이 개발 된 것은 아무것도가없는 경우 나 확실하지 않다 pixel

에서 "레드"값을 설정이다

귀하의 질문에 할 : 빨간색 값을 설정하는 대신 빨간 값을 받고있는 것 같습니다.

그러나 아직도, 당신이 개발 한 것은 여전히 ​​정확한 것입니다. 예 : 17 번째 ~ 24 번째 비트가 1이고 다른 비트가 0 인 유사한 마스크가 있어야하고, &이 마스크를 가진 픽셀을 가져야하고 나머지 값 (17 ~ 24 번째 비트에 위치)을 0 ~ 7 번째 비트로 이동해야합니다.

실제 답변을 드릴 수는 없으므로 실제 답변을 배우려고합니다. 그러나 나는 내가 준 힌트가 충분하다고 생각한다.