참이 되는 경우를 써보면 간단합니다. 만약 *p의 값이 0xff였다면 0x80 & 0xFF 는 0x80이 됩니다. (1000 0000b & 1111 1111b)
즉, 0x80이 자체에 어떤 의미가 있다기 보다도 8번째 bit가 set되어 있는지를 확인한다고 생각하시면 됩니다. 0x80자체의 의미가 아니라 프로그램 문맥을 봐야 무슨 의미인지 알수 있습니다.
p가 char *형이라면 컴파일러 종류에 따라서 허용범위 숫자가 아니라는 경고나 오류 납니다.
컴파일러 종류나 옵션별로 다 틀리죠. unsigned char *라면 다 잘 되고요.
보아하니 ascii 코드 영역을 뽑아내는 거 같네요.
일단 0x80&*p 는 p포인터가 가리키는 곳에서 가져온 값에서 bit 7이 1인지 확인합니다.
그앞의 !에 의해서 bit 7이 0일 경우 true가 되죠. (!연산자 전에 0x80과 AND하면서 bit 7 외는 모두 0이 되버림)
그리고 앞의 *p와 또 && 했습니다. 앞의 *p는 0이 아니라면 무조건 true 처리됩니다.
그래서 *p가 0이 아니고 *p의 bit 7이 0인 경우 참이 되서 while 조건문이 통과됩니다.
그리고 && 뒤편이 잘려져 있는데, 이부분도 더 만족을 시켜야겠죠.
참이 되는 경우를
참이 되는 경우를 써보면 간단합니다. 만약 *p의 값이 0xff였다면 0x80 & 0xFF 는 0x80이 됩니다. (1000 0000b & 1111 1111b)
즉, 0x80이 자체에 어떤 의미가 있다기 보다도 8번째 bit가 set되어 있는지를 확인한다고 생각하시면 됩니다. 0x80자체의 의미가 아니라 프로그램 문맥을 봐야 무슨 의미인지 알수 있습니다.
0x80은 소프트웨어
0x80은 소프트웨어 인터럽트 아닌가요? ^^;;;; 물론 위에서는 시스템 콜을 부르는거랑은 관계없어보이지만... 후다닥~~~
linux system call의 int
linux system call의 int 번호이기도 합니다. 이건 운영체제마다 다 틀리죠.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
보통은 ... EUC-KR
보통은 ...
EUC-KR 기반 프로그램에서 한글문자인지 아닌지 판단할 때 주로 씁니다.
정확히 하자면 ASCII인지 아닌지를 판단하는 코드라 볼 수 있습니다.
윗 코드상으로는 ASCII 대역의 문자만 골라내려는 의도가 엿보이는군요.
더 이상 없다.
*p가 0이 아니면서 0x80
*p가 0이 아니면서 0x80 비트는 켜져있지 않은, (char *p 라면, MSB가 꺼진, 즉 0~127인)
조건이 되겠네요.
utf-8이나 euc-kr검출 코드인가요?
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
"MSB를 체크한다"라고
"MSB를 체크한다"라고 읽으면 되는 코드입니다. ^^;
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
딴지 죄송합니다만,
딴지 죄송합니다만, p의 정확한 타입을 알기 전엔 MSB인지 알 수 없죠. ^^
보통 0x80으로
보통 0x80으로 표기하면 관습적(?)으로 byte를 나타내고 MSB였던것같은데요.
0x0080정도로 표기해야 다른 사이즈였던거같은데... C 만진지는 십수년쯤 전이라 정확하지 않을수도... ^^;
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
p가 char *형이라면
p가 char *형이라면 컴파일러 종류에 따라서 허용범위 숫자가 아니라는 경고나 오류 납니다.
컴파일러 종류나 옵션별로 다 틀리죠. unsigned char *라면 다 잘 되고요.
보아하니 ascii 코드 영역을 뽑아내는 거 같네요.
일단 0x80&*p 는 p포인터가 가리키는 곳에서 가져온 값에서 bit 7이 1인지 확인합니다.
그앞의 !에 의해서 bit 7이 0일 경우 true가 되죠. (!연산자 전에 0x80과 AND하면서 bit 7 외는 모두 0이 되버림)
그리고 앞의 *p와 또 && 했습니다. 앞의 *p는 0이 아니라면 무조건 true 처리됩니다.
그래서 *p가 0이 아니고 *p의 bit 7이 0인 경우 참이 되서 while 조건문이 통과됩니다.
그리고 && 뒤편이 잘려져 있는데, 이부분도 더 만족을 시켜야겠죠.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
댓글 달기