길이가 100 제로와 1보다 큰 바이너리 문자열에 대해 비트 연산을 수행하려고합니다. 나는 내가 같은 것을 사용하여 그것들을 변환 할 수 있다는 것을 안다. 마지막에 L
문자와 함께 1267650600228229401496703205375L
을 인쇄한다. 그런 다음 파이썬 비트 연산자를 사용하지만 정수로 변환하는 것은 좋지 않은 생각입니다. 이것을 할 수있는 다른 방법이 있습니까?큰 바이너리 문자열에 대한 파이썬 비트 연산
3
A
답변
2
난 당신이 있기 때문에 정수를 사용하는 아이디어를 좋아하지 않는다 같은데요 :
파이썬 3 버전 (bin()
의 출력의 시작 부분에서 시작 0b
을 제거 돌보는) 기본 데이터를 난독 화합니다. 게다가 부호가있는 정수와 엔디안의 미묘함은 말할 것도없고 '0'으로 시작하는 문자열로 작업하기가 어렵습니다 (정수로 변환 할 때 트림되기 때문에).
bitarray 모듈을 사용해보십시오. pip와 함께 설치할 수 있습니다 : pip install bitarray
.
from bitarray import bitarray
ba1 = bitarray('0' + '1'*100)
ba2 = bitarray('1' + '0'*100)
len(ba1) # 101
len(ba2) # 101
ba1[0] # False
ba2[0] # True
ba1 | ba2 # bitarray('1111111111.......)
# get your string back
ba1.to01() # "01111111......."
효율성을 말할 수 없습니다. 그러나 적어도 당신이 일하는 것에 관해서는 분명히 느낍니다. https://pypi.python.org/pypi/bitarray/0.8.1
0
0
및 1
의 문자열에 대해 비트 연산을 수행하지 마십시오. 보통 좋지 않고 느립니다. 문자열을 실제 숫자로 변환 한 다음 여러 비트를 한 번에 처리합니다. 이 아무 문제 없습니다 :
int('1'*128,2) & int('1'*128,2)
는하지만 당신은 이미 0
들과 1
의 문자열이 있고 문자열의 부분에 비트 연산을 제어합니다. 다음과 같은 작업을 수행 할 수 있습니다 왼쪽에서 오른쪽으로
l = '1'*1024
r = '1'*1024
print map(lambda x: x[0] & x[1], [(int(l[i:i+64], 2), int(r[i:i+64], 2)) for i in range(0,1024,64)])
이 효과적으로, 작은 덩어리 (64 비트) 문자열을 통해 &
을 사용합니다.
각 결과에 bin()
을 호출하고 문자열이 필요한 경우 다시 연결할 수 있습니다.
l = '1'*1024
r = '1'*1024
print(list(map(lambda x: x[0] & x[1], [(int(l[i:i+64], 2), int(r[i:i+64], 2)) for i in range(0,1024,64)])))
관련 문제
- 1. 루비가있는 문자열에 대한 비트 연산
- 2. 큰 비트 벡터에 대한 비트 연산
- 3. MySQL의 대용량 비트 문자열에 대한 비트 단위 연산 수행?
- 4. C : 가변 길이 비트 문자열에 대한 비트 연산
- 5. iOS의 비트 문자열에 대한 간단한 비트 단위 연산
- 6. 문자열에 대한 연산
- 7. 큰 정수를 사용한 비트 연산
- 8. 문자열에 dplyr 친화적 인 비트 연산 R
- 9. 숫자를 비트 세트로 묶습니다 (파이썬, 비트 연산)
- 10. C가있는 문자열에 대한 수치 연산
- 11. 파이썬에서 긴 16 진수와 아스키 문자열에 대한 비트 연산
- 12. 단일 비트 연산 읽기 파이썬 2.6
- 13. PHP 5.2 및 PHP 5.3의 큰 정수에 대한 비트 연산
- 14. 비트 시프트 연산 : 실행
- 15. lil_matrix의 행에 대한 비트 연산
- 16. C에서 음수에 대한 비트 연산
- 17. 2의 다음으로 큰 힘을 반환하기위한 비트 연산
- 18. Javascript의 비트 AND 연산
- 19. 바이너리 파일 C에서의 연산
- 20. 비트에 대한 연산, 더 큰 값 얻기
- 21. 비트 연산
- 22. 비트 연산
- 23. 비트 연산?
- 24. 비트 연산?
- 25. 확인 문자열에 대한/파이썬
- 26. 비트 연산 튜토리얼
- 27. Javascript에서 48 비트 비트 연산?
- 28. 비트 단위와 비트 시프트 연산
- 29. 파이썬에서 Javascript 비트 연산 복제
- 30. 바이너리 문자열에 대한 문자열 입력 방법은 무엇입니까?
왜 당신이 파이썬 정수에 비트 연산을 할 수있는 나쁜 아이디어라고 생각합니까 :
또한 python3에
문서 작업? –
100 또는 1000 개의 0과 1을 정수로 변환하는 것이 좋은 생각입니까? bitwise 그것을 사용하여 내 문제가 아니라 변환하는 ... @MartijnPieters –
Martijn Pieters가 말한 것, 큰 정수는 연결된 목록 (예 : openssl의'BN_ *')으로 유지됩니다. bignum 이상의 연산자로 그것을하거나 그것을 베고 그것을 반복 루핑 같은 일을 끝납니다. – grochmal