파일 운용(File Operation) 파일 열기/생성 파일에 쓰기 파일 내용 읽기 파이썬 인터프리터에서 실행한 여러 작업들은 컴퓨터 주기억장치인 RAM(random access memory)에 저장됩니다. 이 저장소는 인터프리터가 종료되면 함께 RAM에 저장된 작업과정이나 결과가 휘발되므로 영구적으로 저장되는 하드디스크에 그 작업을 저장할 필요가 있습니다. 이 과정은 표 1의 함수 또는 메소드를 순차적으로 적용하여 실행할 수 있습니다. 표 1 파일 운용을 위한 함수 순서 함수/메소드 내용 1 open() 파일 열기, 함수 2 write() 쓰기(입력) , 메소드 2 read() 읽기 , 메소드 3 close() 파일 닫기, 메소드 파일 열기/생성 파일을 호출 또는 새로운 파일을 생성하기 위해 내장함수인 open() 을 사용할 수 있습니다. 이 함수는 파일의 경로와 그 파일을 처리하는 방식을 지정합니다. 파일의 처리방식은 표 2에 소개한 것과 같이 다양합니다. 표 2 open() 함수의 mode 종류 mode 의 미 'r' 읽기전용(기본값) 'w' 쓰기 전용, 파일이 존재하지 않으면 새로운 파일이 생성되고 파일이 존재한다면 이전 내용은 지워집니다. 'x' 파일 생성, 파일이 존재한다면 에러발생 'a' 파일의 기존 내용의 끝에 첨가되고 파일이 존재하지 않는 경우 새 파일이 생성 't' 파일을 text 모드로 엽니다(기본). 'b' 파일을 이진모드로 엽니다. '+' 파일을 업데이트하기 위해 오픈합니다. 사용방식은 r 과 w를 모두 사용합니다. open() 함수 사용 후 결과를 저장을 위해서는 인터프리터에서 그 객체(결과)를...
보수(complement)
컴퓨터에서 음수를 직접적으로 표현할 수 없기 때문에 부호 비트를 지정하여 양수에 대한 음수는 2의 보수(tow's complement)를 사용하여 나타낼 수 있습니다.
보수는 어떤수를 보충하여 완전수를 만들게 하는 수로 1의 보수와 2의 보수 방법이 있으며 어떤수에 대응하는 음수의 이진수 표현은 2의 보수 방법을 적용합니다.
- 1의 보수 ⇒ 값의 반전, 즉 0 → 1, 1 → 0
- 예를 들어 4비트에서 완전수는 1111(2)이 됩니다. 그러므로 0010(2)에 1의 보수를 더하면 다음과 같이 완전수가 됩니다.
0 | 0 | 1 | 0 | ||
+ | 1 | 1 | 0 | 1 | (1의 보수) |
1 | 1 | 1 | 1 | (완전수) |
- 2의 보수⇒ 1의 보수 결과 + 1(2)
- 예를 들어 위의 1의 보수법에 의한 결과인 1101(2)에 1(2)를 더하면 1110(2)이 됩니다. 기준이 되는 최왼쪽에 있는 비트는 부호를 나타내는 것으로 1이므로 음수임을 나타냅니다.
- 이 음수값을 직접적으로 십진수로 전환할 수 없습니다. 그러므로 이 값을 알기 위해서는 다시 2의 보수를 결정합니다.
1 | 1 | 1 | 0 | |
1의 보수 → | 0 | 0 | 0 | 1 |
2의 보수 + | 0 | 0 | 0 | 1 |
2 ⇐ | 0 | 0 | 1 | 0 |
위 결과 1110(2)의 부호변환 결과는 2이므로 -2가 됩니다.
예)
16비트를 기준으로 2의 보수를 사용하여 십진수 7의 음수인 이진수를 결정해봅니다.
0 | 0 | 0 | 0 | … | 0 | 1 | 1 | 1 | ||
7에 대한 2의 보수: | 1 | 1 | 1 | 1 | … | 1 | 0 | 0 | 1 | ⇒ -7 |
-7의 2진수를 십진수로 확인하기 위해서는 다시 2의 보수를 적용합니다. | ||||||||||
-7에 대한 2의 보수: | 0 | 0 | 0 | 0 | … | 0 | 1 | 1 | 1 | ⇒ 7 |
numpy 패키지의 binary_repr()함수를 적용하여 확인할 수 있습니다.
from numpy import binary_repr binary_repr(-7, width=16)
'1111111111111001'
예)
8비트를 기준으로 2의 보수를 사용하여 127(10)의 음수인 이진수를 결정해봅니다.
127: | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
2의 보수: | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | ⇒ -127 |
binary_repr(-127, width=8)
'10000001'
댓글
댓글 쓰기