연습문제 관련 질문드립니다.
마지막에 내주신 연습문제에서 '기사의 좋아요를 다시 클릭했을 때'를 저는
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
463
1
메모리 주소 10진수로 출력
1
653
1
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
1
498
1
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
1
534
1
메모리 주소에 관한 질분
0
678
1
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
0
548
1
형변환 오버로딩에서 const 관련 질문이 있습니다.
0
443
1
Digit 뒤에 reference를 사용하는 이유
0
509
1
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
0
322
1
dat파일이...
0
537
1
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
0
643
1
복사 생성자 관련 질문이 있습니다.
0
453
1
수업 중 궁금한점이 있습니다.
1
389
1
라이브러리자체가 이해가 되지 않습니다.
0
561
1
마지막 예제 질문
0
302
1
증감연산자 위치에 따른 수행 순서 질문입니다.
0
374
1
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
1
410
1
friend함수 관련 질문이 있습니다.
0
311
1
operator+ 정의부분에서 궁금한 것이 있습니다.
0
447
1
3분 17초 질문
0
350
1
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
0
445
1
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
0
442
2
const Something &st에서 const를 빼면 안되나요?
0
300
1
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
1
491
1





