2017-11-22 8 views
1

비트 필드에서 삽입 작업을 수행하려면 어떻게해야합니까?비트 필드에서 삽입 작업을 수행하는 방법은 무엇입니까?

1111 (정수 15) 인 경우 11101을 얻기 위해 "인덱스"에 0을 어떻게 삽입 할 수 있습니까?

저는 스위프트 4에 글을 쓰고 있는데 데이터 타입으로 Int를 사용하고 있습니다. 그들이 비트 필드에 제거 작업을 수행하는 방법을 보여이 유래 포스트에서

는 (은 자바의 그러나 이것은 상당히 언어 무신론자입니다) : Removing bit at specific index

P.S. 이것은 고성능 코드입니다.

답변

2

위의 비트와 삽입 지점 아래의 비트를 추출해야합니다. 위 비트를 왼쪽으로 옮긴 다음 부품을 다시 결합해야합니다. 따라서 :

var x: UInt64 = 0b1111 
let index: UInt64 = 1 
let lowMask: UInt64 = (1 << index) - 1 
let highMask: UInt64 = ~lowMask 
x = ((x & highMask) << 1) | (x & lowMask) 
print(String(x, radix: 2)) 
// Output: 11101