2017-11-09 26 views
1

다음은 내가하고있는 프로그램의 일부이고, 두 번째 16 진수 사이의 "AND"연산을 수행해야합니다. 첫 번째 부분은 모두 ok이지만, 두 번째 부분에서 너무 길면 16 진수를 사용할 때 결과가 예상과 다릅니다.결과는 헥스 논리적 "and"with python

#this is ok 
x = hex(268435456)  
transition = int(x, 16) & 0x000000FF 
>>>> print transition 
>>>> 6 

#this does not work 
y = hex(268435456) 
transition = int(y,16) & 0xFFFFFF00 
>>>> print transition 
>>>> 268435456 
#in this case the result should be 10 00 00 00 

무슨 일이 일어나고 있는지 알고 계십니까?

+1

#이 경우 결과는 10 00 00 00이어야합니다. '왜 그렇게 생각하니? 그리고 왜 숫자를 16 진수 문자열로 변환 한 다음 int로 다시 변환합니까? 그들은 이미 int입니다. – pvg

+0

첫 번째 결과를 재현 할 수 없습니다 (0이됩니다). 두 번째 결과가 올바른 것 같습니다. –

답변

1

결과 는 십진수 268435456이다0x10000000 진수이다. hex(268435456)을 참조하십시오.

10 진수를 문자열로 변환하고 int로 다시 구문 분석 할 필요가 없습니다. 그냥하십시오 :

x = 268435456 
y = x 
transition_x = x & 0xFF 
transition_y = y & 0xFFFFFF00 
print transition_x # 0 
print transition_y # 268435456 

첫 번째 결과가 잘못되었습니다. 결과는 이 아니라 0입니다.

당신은 진수 표기 (1234), 16 진법 (0x4d2) 또는 8 진수를 사용하여 정수를 정의하면 (0o2322 또는 02322 [py2), 그것은 항상 내부적으로 int로 저장됩니다. 위에 사용 된 숫자 리터럴은 동일한 십진수 값 1234을 나타냅니다. 숫자를 인쇄하면 명시 적으로 특정 문자열 표현으로 변환하지 않는 한 항상 십진수 표기법이 사용됩니다.

+0

사실, 0x10000000을 얻기 위해 출력을 16 진수로 변환해야한다는 것을 눈치 채지 못했습니다. 감사 – Oscoke

1

결과가 10 00 00 00이고 16 진수 대신 10 진수로 표시됩니다.

>>> print '{:x}'.format(268435456) 
10000000 
+0

결과가 아닙니다. 16 진수로 변환하면됩니다. – pvg

+0

이것은 16 진수 표현입니다 (2 자리마다 간격이 암시하는 것입니다). 두 개의 서로 다른 방식으로 표현 된 * 정수 *입니다. – wim