이 간단한 코드를 작성했습니다 : 비트 연산자. 출력이 매우 이상합니다. 비트를 변경하면 1<<i
에서 1>>i
까지와은 항상 0입니다. 출력을 참조하십시오.이 비트 연산이 작동하지 않는 이유를 모르겠다
reg=31272
#binreg=111101000101000
print bin(reg)
for i in range(0,15):
mask=1<<i
c=reg & mask
print "i:", i ,"c:", c ,"-", bin(c)
출력 :
bitwise_little_endian():
0b111101000101000
i: 0 c: 0 - 0b0
i: 1 c: 0 - 0b0
i: 2 c: 0 - 0b0
i: 3 c: 8 - 0b1000
i: 4 c: 0 - 0b0
i: 5 c: 32 - 0b100000
i: 6 c: 0 - 0b0
i: 7 c: 0 - 0b0
i: 8 c: 0 - 0b0
i: 9 c: 512 - 0b1000000000
i: 10 c: 0 - 0b0
i: 11 c: 2048 - 0b100000000000
i: 12 c: 4096 - 0b1000000000000
i: 13 c: 8192 - 0b10000000000000
i: 14 c: 16384 - 0b100000000000000
bitwise_big_endian():
0b111101000101000
i: 0 c: 0 - 0b0
i: 1 c: 0 - 0b0
i: 2 c: 0 - 0b0
....
....
왜 결과 * *가 0이 될 것이라고 기대하십니까? '1 >> i는 임의의 양수 'i'에 대해 0이고 'anything & 0'는 0입니다. – user2357112
오, 1 << N 왼쪽으로 이동하지만 1 >> N 오른쪽으로 이동하기 때문입니다. 따라서 아치가 리틀 엔디안이기 때문에 마지막 비트 (16 비트) 이후에 패딩은 항상 0입니다. 이 설명이 맞습니까? –
아니요. 나는 당신이 거기에서 말하려고하는 것이 확실치 않지만, 엔디안은 사물에 들어 가지 않으며 16 비트가 아닙니다. – user2357112