& 0x80 를 해주는 이유

 0x80 을 &연산 하는 이유



가끔 소스를 보다보면
char 한개와 & 0x80 의 비트 연산을 볼수있는데,
이것이 무엇을 의미하는지 알아보자


우선 ASCII 의 경우 문자는 7bit로 구성되고 첫번째 1bit는 다른 용도로 쓰인다는 것.
즉, ASCII 문자라면 0000 0000 ~ 0111 1111 의 범위를 가진다는 것을 알수있다.
그렇다면 유니코드는 첫번째 1bit가 1의 값이 되어있을 것이란 추측이 가능하다.


그러므로 str[i] & 0x80 를 수행 한다는 것은 str[i]가 어떤 값인지는 모르지만 

    X??? ???? ==> str[i]
&  1000 0000 ==> 0x80 
-------------------------
이와 같은 연산이 되어서 ASCII가 아닌 문자일 경우 TRUE가 되고
ASCII 문자는 모두 false 값이 되는 것이다.
 
  
<이해가 안되는 분들을 위해 다시 정리>

if ( (ch & (byte)0x80 ) != 0) 
위의 부분을 보았을때... 설명을 하자면, 
ch 라는 char 를 16진수 Ox80 ( 10진수는 128, 2진수는 1000 0000 ) 를 
비트 and 연산을 하는데요.. 그 결과값이 0 OR 다른 수 가 나오지요. 

저희가 한 문자를 표현을 할때, ASCII 문자로는 7bit 로 표현이 되는데요. 
전체 8bit를 사용해서, 표현이 됩니다. 

- 아스키: 7 bit 코드 (0x00 ~ 0x7F) 
- ISO-8859-1: 1 바이트 서유럽 문자세트 (0x00 ~ 0xFF) 
0x00 ~ 0x7F: 아스키 문자 
0x80 ~ 0xFF: 서유럽 문자 (즉, MSB-(최상위 bit)가 1인 경우) 

만약 ch = 'A' 일때, 
'A' = 0x41 = (0100 0001) = (65) 입니다. 

이것을 bit and 하면, 

0100 0001 
1000 0000 & 연산을 하면 
------------------------- 
0000 0000 = (0) 

0 이라는 결과가 나옵니다. 
소스코드에서 0일때, 유추할수 있는것은.. 
MSB bit가 0 or 1 이냐를 구하는것 같은데요.. 
ASCII 문자, 1byte UTF-8 문자 등등 문자들을 알수 있을것 같구요. 

즉, 현재의 소스 코드 부분에서 무엇을 구할려는지 정확히 알수 없습니다. 
전체 코드중에 이 부분이 무엇을 담당을 하는지 알아야 하니까요. 
그리구요, 0x80 이라는것은 문자셋을 찾아 보시면, 이 부분이 왜 필요한지 알게 됩니다. 
중요한 것은 문자셋에 대한 내용을 공부를 하심이 좋을 듯 합니다. 


이 글을 공유하기

댓글

Designed by JB FACTORY