2014-01-30 3 views
0

나는 가속도계의 값을 읽고 '값'이라는 버퍼에 저장하고 있습니다. 각 가속도계 판독 값은 10 비트 길이이지만 값은 바이트로 읽혀 지므로 가속도계 판독 값은 실제로 '값'버퍼의 2 바이트 또는 2 값입니다. 이것은 하나 개의 값 얻기 위해 두 바이트를 결합하는 방법에 대한 예제 코드입니다 :누군가이 코드 라인을 설명해 주시겠습니까?

x = ((int)values[1]<<8)|(int)values[0]; 

내가 값을 결합하고있어 것을 얻을 수를 [1] 값 [2] 나는 (int)를 확실 해요 부분은 정수로 해당 부분을 캐스팅하는 유형입니다 (비록 확실하지는 않지만). 나를 혼란스럽게하는 부분은 <<8이고 수직 막대는 |입니다. 이 두 부분은 무엇을하고 있습니까?

설명해 주셔서 감사 드리며 도움을 드릴 수 있습니다.

+1

http://www.cprogramming.com/tutorial/bitwise_operators.html – SLaks

답변

0

예를 들어 10 진수를 0101010111 바이너리로 취합니다.

하위 8 비트는 values[0] = 01010111 (이진수는 87)입니다.

상위 2 비트는 values[1] = 01입니다.

values에서 원래 10 비트 수를 복구하려면

(int)values[1] << 8 --> 01 << 8 --> 0100000000 

values[1]는 INT (일반적으로 32 비트)로 변환 된 후 << 8 비트 왼쪽 쉬프트 하였다.당신은 2 바이트 (1 바이트 = 8 비트)가

0100000000 
| 01010111 
------------ 
    0101010111 

QED

3

비트 마스크입니다.

너는 left shifting (<<) 값은 values[1]에 의해 8 비트 위치에 있습니다. ORing (|)values[0]의 값으로 변경합니다.

일부 값을 가져 와서 사용해보십시오. 너는 그것을 더 잘 이해할 것이다.

더 많은 읽기 및 비트 조작 예제는 여기 link입니다.

2

이 코드 줄은 첫 번째 char이 8 비트 이동하는 방식으로 두 char을 int로 결합합니다.

예를 들어 값 [0] = 5, 값 [1] = 1이면 값은 128 + 5 = 133이되어야합니다. 상위 바이트 1은 128을 의미하므로이를 보는 또 다른 방법은 다음과 같습니다. :

x = ((int)values[1]<<8) + (int)values[0]; 

+를 입력하면 더 쉽게 읽을 수 있습니다. 희망이 도움이됩니다.

0

< < 연산자는 두 번째 바이트의 비트를 8 비트만큼 왼쪽으로 시프트하므로 예를 들어 0000000011111111은 1111111100000000이됩니다. 비트 또는 양쪽 비트가 1이면 1로 만드는 모든 위치에서 2 비트를 결합하는 2 진 "또는"연산자입니다.

0

당신은 10에서 읽으려는 :

((int)values[1]<<8) | (int)values[0] --> 0100000000 | 01010111 

또는 수직 표기법

는 비트 또는를 표현하는 왜 당신이 1을 사용하는 대신 2 바이트가 필요합니다. 2 바이트를 int로 캐스팅해야만 정수와 같은 값을 처리 할 수 ​​있지만 2 바이트를 캐스팅해야하는 값을 읽을 때 문제가있는 경우 이고 다음 바이트 value[0]은 227 (11100011) 코드를 추가하면 올바른 값을 얻을 수 있으므로 value[1]을 8로 왼쪽으로 옮겨야합니다.

부호없는 char/char/byte를 8 비트 시프트하면 0이됩니다. 따라서 캐스팅해야합니다. 당신이 비트 이동을 할 때 모두를 int로 value[1]value[0]은 그래서 당신은 '당신은 내가 유일한 16 비트의 int를 사용하고

(00000011 00000000 | 00000000 11100011) = (00000011 11100011) = 995 

참고로 끝날 value [0]로하고 예 외설 | 그래서 지금 768 (00000011 00000000)와 끝까지 0의 뭉치로 가득 찬 t.

프로그래밍 계산기에 액세스하면이 바이트 값을 정수로 변환해야하는 이유를 이해하는 데 도움이되며 일반적으로 캐스팅하는 데 도움이됩니다. 나는 당신이 그것에 접근 할 수있는 경우에 약간을위한 창 계산기 app로 주변에 노는 sugest하고자했다. 프로그래머 관점에서보기 -> 프로그래머로 이동하십시오.

관련 문제