Cracking the coding interview--Q5.6
텍스트:
Write a program to swap odd and even bits in an integer with as few instructions as possible (e.g., bit 0 and bit 1 are swapped, bit 2 and bit 3 are swapped, etc).
번역:
쓰기 프로그램은 가능한 한 적은 지령을 사용하여 정수의 2진법의 짝짓기 비트를 교환한다. (예:bit 0비트와bit 1위 교환,bit 2위와bit 3비트 교환 등)
해답하다
각각 이 정수의 홀수와 짝수를 추출한 다음에 위치를 바꾸거나 바꾸면 된다.
코드는 다음과 같습니다.
public static int swap_bits(int x){
return ((x&0x55555555)<<1)|((x>>1)&0x55555555);
}
물론 더 자연스러운 방식으로 이 코드를 쓸 수도 있다.
public static int swap_bits1(int x){
return ((x&0x55555555)<<1)|((x&0xAAAAAAAA)>>1);
}
위의 코드 사고방식과 작용은 모두 같지만 이라는 책에 따르면 첫 번째 방법은 하나의 레지스터에서 두 개의 큰 상수를 생성하는 것을 피했다.만약 컴퓨터에 비지령이 없다면 두 번째 방법은 1개의 지령을 더 사용하게 될 것이다.총괄적으로 말하면 첫 번째 방법이 더 좋다.(참조:http://hawstein.com/posts/5.6.html)
전체 코드는 다음과 같습니다.
class Q5_6{
public static void print_binary(int x){
String s="";
for(int i=0;i<32&&x!=0;++i,x>>=1){
if((x&1)==1) s="1"+s;
else s="0"+s;
}
System.out.println(s);
}
public static int swap_bits(int x){
return ((x&0x55555555)<<1)|((x>>1)&0x55555555);
}
public static int swap_bits1(int x){
return ((x&0x55555555)<<1)|((x&0xAAAAAAAA)>>1);
}
public static void main(String[] args){
int x = -7665543;
print_binary(x);
print_binary(swap_bits(x));
print_binary(swap_bits1(x));
}
}
---EOF---
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.