✅ ord()
문자를 유니코드(ASCII) 값으로 변환
예제:
print(ord('A')) # 65
print(ord('a')) # 97
print(ord('0')) # 48
✅ chr()
유니코드(ASCII) 값을 문자로 변환
예제:
print(chr(65)) # 'A'
print(chr(97)) # 'a'
print(chr(48)) # '0'
✅ XOR 개념
같은 값끼리 XOR하면 0이 되고, 0과 XOR하면 원래 값 유지
수식: A ⊕ A = 0, A ⊕ 0 = A
예제:
print(5 ^ 5) # 0
print(5 ^ 0) # 5
✅ 문자 XOR 예제
char1 = 'A' # 'A'의 ASCII 값 = 65
char2 = 'B' # 'B'의 ASCII 값 = 66
xor_result = ord(char1) ^ ord(char2)
print(xor_result) # 3 (65 ⊕ 66)
decoded_char = chr(xor_result)
print(decoded_char) # 출력: '' (제어 문자)
ord('A') = 65, ord('B') = 66
65 ⊕ 66 = 3
chr(3) → 제어 문자 출력
✅ 동일한 키를 사용하면 XOR을 두 번 하면 원래 값으로 복원됨
def xor_encrypt_decrypt(text, key):
return ''.join(chr(ord(c) ^ key) for c in text)
message = "hello"
key = 42 # 비트 XOR 키
# 암호화
encrypted = xor_encrypt_decrypt(message, key)
print("Encrypted:", encrypted)
# 복호화
decrypted = xor_encrypt_decrypt(encrypted, key)
print("Decrypted:", decrypted)
📌 실행 결과
Encrypted: /''-.
Decrypted: hello
ord(c) ^ key를 사용하여 암호화
동일한 키로 다시 XOR하면 원래 문자열 복구됨
✅ 136. Single Number (Leetcode)
"모든 숫자가 두 번씩 등장하는 배열에서, 한 번만 등장하는 숫자를 찾아라."
from typing import List
def singleNumber(nums: List[int]) -> int:
result = 0
for num in nums:
result ^= num # XOR을 누적
return result
print(singleNumber([4,1,2,1,2])) # 출력: 4
같은 숫자는 XOR 연산으로 사라짐 (A ⊕ A = 0)
한 번만 등장한 숫자만 남음
🚀 결론
ord() → 문자 → 숫자로 변환
chr() → 숫자 → 문자로 변환
XOR 연산은 암호화, 복호화, 특정 문제 해결에 유용
XOR 두 번 하면 원래 값 복원 가능 (A ⊕ key ⊕ key = A)
좋아, 이건 비트 연산인 XOR(배타적 논리합)에 관한 질문이네.
ord(char)는 문자의 ASCII 정수값을 구하고, ^는 XOR 연산자야.
'A' → ord('A') = 65 → 2진수로 01000001'B' → ord('B') = 66 → 2진수로 01000010 01000001 (65, 'A')
⊕ 01000010 (66, 'B')
-----------
00000011 (3)
XOR은 같은 자리의 비트가 다르면 1, 같으면 0이야.
| A | B | A ^ B |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 1 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
위에선 딱 맨 끝의 두 자리만 다르니까 결과는 00000011 → 십진수 3
ord('A') = 65 = 01000001ord('B') = 66 = 0100001065 ^ 66 = 3 = 00000011그래서 출력은 3