해결된 질문
작성
·
208
1
마지막에 내주신 연습문제에서 '기사의 좋아요를 다시 클릭했을 때'를 저는
my_article_flags ^= option_liked;로 했는데
답안에는 my_article_flags &= ~option_liked;로 되어있습니다.
마찬가지로 13:57초 부분에서도 items_flag &= ~opt3으로 하셨는데 저는 items_flags ^= opt3이라고 생각했습니다.
13:57초 부분이나 연습문제 부분이나 둘 다 같은 경우이고, ^= 을 쓰든 &= ~을 쓰든 결과는 똑같았는데 혹시 &=~ 대신에 ^=을 쓰면 안 되는 이유가 혹시 있을까요?
^=을 쓰는 것은 이해가 쉽게 가지만 오히려 &=~ 을 쓰는 경우는 이해가 잘 안 돼서 쉽게 와닿지가 않습니다 ㅠ ㅠ
답변 2
3
안녕하세요.
^= 을 쓰셔도 됩니다. 저도 이 강의를 들었을 때 기록해놨던 제 연습 문제의 풀이를 다시 찾아봣는데 질문자님처럼 ^= 을 사용해서 풀었더라구요!
&=~ 은 해당 비트를 '삭제'한다는 것에 초점이 맞춰져 있습니다. 좋아요 상태를 상징하는 비트가 00000100 이라면 이의 보수(~)는 11111011 가 되겠죠! 이를 가지고 and 연산하면 좋아요 상태를 상징하는 세번째 자리의 비트를 무조건 0 으로 만들 수 있을겁니다. and 연산에서는 피연산자 중 하나라도 0 이 들어가면 0이 되니까요!
기사의 좋아요를 다시 클릭 한다는 것을 '좋아요를 취소 + 삭제한다'는 의미로 생각해본다면 &=~ 를 사용하는 풀이가 될 것 같아요.
기사의 좋아요를 다시 클릭한다는 것을 약간 상태를 반전시키는 토글의 느낌으로 좋아요 되어있는 상태라면 삭제가 되게끔, 좋아요가 안되어 있는 상태라면 좋아요가 되게끔 반전 시킨다는 의미로 해석했을 땐 질문자님처럼 ^= 을 쓰는 풀이가 맞을 것 같아요!
이미 좋아요가 되어 있는 상태에서 좋아요를 다시 클릭하는 행위이니 좋아요는 삭제가 되야 합니다. 그러니 이러한 경우엔 &=~ 를 사용하든 ^= 를 사용하든 결과가 동일합니다.
1