나는 i 번째 비트가 무엇인지 상관없이 i 번째 비트를 0으로 설정하고 싶습니다.i 번째 비트를 0으로 설정 하시겠습니까?
unsigned char pt = 0b01100001;
pt[0] = 0; // its not how we do this...
하나에 설정, 우리는 마스크 pt | (1 << i)
을 사용할 수 있습니다하지만 난 그게 가능하면 0을 설정하는 마스크를 생성하는 방법을 모르겠어요.
나는 i 번째 비트가 무엇인지 상관없이 i 번째 비트를 0으로 설정하고 싶습니다.i 번째 비트를 0으로 설정 하시겠습니까?
unsigned char pt = 0b01100001;
pt[0] = 0; // its not how we do this...
하나에 설정, 우리는 마스크 pt | (1 << i)
을 사용할 수 있습니다하지만 난 그게 가능하면 0을 설정하는 마스크를 생성하는 방법을 모르겠어요.
로직 OR
을 로직 AND
으로 교체하기 만하면됩니다. 당신은이에 대한 &
연산자를 사용합니다 : 반전에
pt = pt & ~(1 << i);
당신이 당신의 마스크 그래서 당신은 지정해야합니다 것 ... 0
이 삭제됩니다 동안 비트를 유지하는 1
로 보내고 논리적 AND
때문에 지우기를 원하는 위치에 0
을 입력하십시오. 특히 1 << i
을 수행하면 000...010..000
인 마스크가 제공되며 여기서 1
은 원하는 비트 위치에 있고 반전하면 111...101...111
이됩니다. 논리 AND
을 입력하면 원하는 비트가 지워집니다.
이 스틱 수 :
// Set bit at position `bitpos` in `pt` to `bitval`
unsigned char bitpos = 1;
unsigned char pt = 0b01100001;
bool bitval = 1;
// Clear the bit
pt &= ~(1u << bitpos);
// Set the bit
pt |= (bitval << bitpos);
는 비트 단위 AND와보십시오. – juanchopanza
@juanchopanza OK – GivenPie
pt & = ~ (1 << i) – cppguy