예로 설명해 보겠습니다.
두개의 변수 a,b a= 0b11010001 b=0b00110011
변수의 3번째 비트 ( index는 2)를 반전 시켜 보겠습니다.
mask= 0b10000000; // 마스크 초기값
mask= mask >> index; // mask =0b00100000 index만큼 오른쪽으로 이동
[ a 경우 ]
a & mask Result 0b00000000 ( 0임 )
a + = mask; 하면 a는 0b11110001 이 됨 (bit 반전)
또는
a | = mask ; OR연산도 같은 값
[ b 경우 ]
b & mask Result 0b00100000 ( 0이 아님)
b - = mask; 하면 b는 0b00010011 이 됨 (bit 반전 )
또는
b & = ! mask; 도 같은 값
이것을 기초로 코딩하면
mask 는 세팅을 원하는 2진수 자리수 의 최상위 bit를 1로 한다.
ex) 8자리 이진수 경우 0b10000000
5자리 이진수 경우 0b10000
index는 최상위 bit를 0으로 오른쪽으로 증가
토글 시키기 : a+= ( a& (mask >>index) ==0 ) ? mask: -mask;
(진행순서)
mask >> index ;
if( (a & mask) ==0) a+=mask; // 또는 a|=mask;
else a-=mask; // 또는 a&=!mask;
특정비트 1로 세팅하기 : a|=( mask >> index );
(진행순서)
mask >> index
a|= mask ; // bit OR 연산자
특정비트 0으로 세팅하기 : a&=!( mask >> index );
(진행순서)
mak >> index
mask= !mask // bit NOT연산자 ex) 0b0010 이면 0b1101로 됨
a&= mask ; // bit AND 연산자
자리수에 따라 mask를 따로 정하지 말고
mask는 항상 1 로 세팅하고 비트연산은 왼쪽으로 ( << ) 하는
방법도 있지만
이때는 index를 (자리수 - index )씩으로 처리 하든지
아님 최하위비트를 0으로 왼쪽으로 갈수록 증가 시켜야 한다.
아마 왼쪽에서 오른쪽으로 글을 읽는 우리는 제일
처음 방법이 이후 coding이 편하고 이해도 쉬울 것이다.
'Tip !!! > C# tip' 카테고리의 다른 글
인수 없이 외부프로그램 실행시키기 (0) | 2022.07.28 |
---|---|
커맨드 라인 인자 전달 외부프로그램 실행 (0) | 2022.07.28 |
사용자정의Control이 메인폼의 Control에 접근하기 (0) | 2022.07.27 |
사용자Control에 속성 만들기 (0) | 2022.07.27 |
파일패스에서 파일명 얻기 (0) | 2022.07.27 |