완료됨
초보라서 이해가 잘 되지 않습니다

둘 중 하나라도 1이면 1이고 아니면 0이라는게 숫자가 있고 없고를 자리마다 비교하는건가요?
1이면 결과값은 어떻게 나와야하나요?
궁금해서 잠도 못 잘 것 같습니다

#리버싱 #배경지식
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
믕믕이부하
대표 업적 없음

질문하시는 부분이 정확히 어딘지는 모르겠습니다만 내용을 보니 or 연산에 대한 질문 같아 해당 강의에 or 연산 예제를 설명드리겠습니다.

[Register]
eax = 0xffff0000
ebx = 0xcafebabe
[Code]
or eax, ebx
[Result]
eax = 0xffffbabe

0xffff0000 와 0xcafebabe 라는 16진수가 있다고 합시다.

0xffff0000를 비트(2진수)로 바꾸면

0xf -> 1111
0xf -> 1111
0xf -> 1111
0xf -> 1111
0x0 -> 0000
0x0 -> 0000
0x0 -> 0000
0x0 -> 0000

즉, 11111111111111110000000000000000 로 나타낼 수 있습니다.
0xcafebabe도 마찬가지로

0xc -> 1100
0xa -> 1010
0xf -> 1111
0xe -> 1110
0xb -> 1011
0xa -> 1010
0xb -> 1011
0xe -> 1110

11001010111111101011101010111110 으로 나타낼 수 있습니다.

이제 두 수를 or 연산을 하여 둘중 하나라도 1이면 1로 하고 아니면 0으로 만들겠습니다.

첫번째 수: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
두번째 수: 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 1 1 0

결과     : 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 1 0

두 수의 각 자리를 비교했을때 1이 하나라도 있으면 결과 값에 해당 자리를 1로 채워주고, 둘다 0이라면 0을 채워줍니다. 결과적으로 11111111111111111011101010111110이라는 수가 나왔고 해당 수를 다시 16진수로 변환시켜 주면 0xffffbabe가 됩니다.

즉 0xffff0000 와 0xcafebabe에 대한 or 연산의 결과는 0xffffbabe입니다.

2021.12.30. 02:39