ascii code랑 xor

Leejaegun·2025년 3월 16일

코딩테스트 시리즈

목록 보기
13/49

1. ord()와 chr() 기본 개념

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'

2. XOR 연산 활용하기

✅ XOR 개념
같은 값끼리 XOR하면 0이 되고, 0과 XOR하면 원래 값 유지
수식: A ⊕ A = 0, A ⊕ 0 = A
예제:

print(5 ^ 5)  # 0
print(5 ^ 0)  # 5

3. XOR을 활용한 문자 변환

✅ 문자 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
6566 = 3
chr(3) → 제어 문자 출력

4. XOR을 이용한 암호화 & 복호화

✅ 동일한 키를 사용하면 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하면 원래 문자열 복구됨

5. 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 연산자야.


우선 ASCII 값을 확인해보자:

  • 'A'ord('A') = 65 → 2진수로 01000001
  • 'B'ord('B') = 66 → 2진수로 01000010

두 값을 XOR 해보자:

   01000001  (65, 'A')
⊕ 01000010  (66, 'B')
-----------
   00000011  (3)

XOR은 같은 자리의 비트가 다르면 1, 같으면 0이야.

ABA ^ B
000
110
011
101

위에선 딱 맨 끝의 두 자리만 다르니까 결과는 00000011십진수 3


요약

  • ord('A') = 65 = 01000001
  • ord('B') = 66 = 01000010
  • 65 ^ 66 = 3 = 00000011

그래서 출력은 3

profile
Lee_AA

0개의 댓글