[완료][재질문 수정]비트연산 질문입니다.

kkume의 이미지

char ch = 0x48;

이렇게 들어온 값이 있는데요..

MSB 4bit = 4, LSB 4bit = 8 이란 값을 어떻게 체크해야 하는지요?

추가질문:

char 1바이트에서 MSB 2개의 bit 값(b7, b6),
short 2바이트에서 MSB 2개의 bit 값(b15, b14),
int 4바이트에서 MSB 2개의 bit 값(b31, b30) 이 얼마인지 알려면 어떻게 체크해야 하나요?

아래 두 분 답변 감사합니다.

haze11의 이미지

(ch&0x0f) == 0x08
(ch&0xf0)>>4 == 0x04

Fe.head의 이미지

c++이라면

#include <bitset>
#include <iostream>
 
using namespace std;
 
int main()
{
    bitset<sizeof(char)*8>  flag(0x48);
    cout << "현재값 : " << flag << endl << endl;
 
    for(int i = 0 ; i < sizeof(char)*8 ; ++i )
        cout << i << "번째 flag 값 : " << flag[i] << endl;
 
    return 0;
}
 
출력 :
현재값 : 01001000
 
0번째 flag 값 : 0
1번째 flag 값 : 0
2번째 flag 값 : 0
3번째 flag 값 : 1
4번째 flag 값 : 0
5번째 flag 값 : 0
6번째 flag 값 : 1
7번째 flag 값 : 0

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

okdongil의 이미지

char ch은 char type이므로 1 byte 즉, 8bit인데요.
그렇다면 MSB 4bit = 4, LSB 4bit = 8을 따로 check하는 것이 의미가 있나요?
char type의 MSB 4bit, LSB 4bit check는 그냥 값을 비교하면 될거 같아요
그냥 ch == 0x48 이렇게요.

그리고 각 data type의 MSB n bit 값을 아는 것은

#define GET_MSBNBIT(var, n, type)\
(var & ((2^n)-1) << (sizeof(type)*8 - n)) >> (sizeof(type)*8 - n)

이렇게 하면 될거 같은데요...
Test는 안 해봤어요...

kkume의 이미지

맨 처음 질문에서는요..

ch = 0x48 은 십진수로 72 이잖아요.. 그런데 쓸때에는 72를 쓰는 것이 아니라, MSB 4bit 값 0x04, LSB 4bit 값 0x08 이렇게 따로 사용하기 때문입니다.

그리고 두번째 추가 질문은

char 1바이트에서 MSB 2개의 bit 값(b7, b6),
short 2바이트에서 MSB 2개의 bit 값(b15, b14),
int 4바이트에서 MSB 2개의 bit 값(b31, b30) 이 얼마인지 알려면 어떻게 체크해야 하나요?

이와 같은 의미였습니다.

Fe.head의 이미지

#define GET_MSG2BIT( var ) (((var) >> (sizeof((var)) * 8 - 2) ) & 0x03)

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"