알 수없는 크기의 이진 수로 모든 비트를 '1'로 어떻게 설정하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/818535

  •  03-07-2019
  •  | 
  •  

문제

나는 어셈블리에 함수를 쓰려고 노력하고있다 (그러나 질문에 대해 언어가 불가지론을 가정하자).

BitWise 연산자를 사용하여 전달 된 A의 모든 비트를 1로 설정하려면 어떻게해야합니까?

비트를 사용할 수 있다는 것을 알고 있습니다. "또는"설정하려는 비트가있는 마스크와 함께 "이진 수의 N 크기를 기반으로 마스크를 구성하는 방법을 모르겠습니다.

도움이 되었습니까?

해결책

~ (X & 0)

X & 0은 항상 0을 초래하고 ~는 모든 비트를 1s로 뒤집습니다.

다른 팁

0으로 설정 한 다음 모든 비트를 비트로 비트로 1로 뒤집습니다.

당신은 그것을 조립 언어로 찾을 것입니다 가지다 "숫자 전달"의 크기를 아는 것. 그리고 조립 언어에서는 정말 중요합니다 어떤 기계 어셈블리 언어는입니다.

그 정보가 주어지면, 당신도 묻는 것일 수 있습니다

  • 정수 레지스터를 1 비트로 어떻게 설정합니까?

또는

  • 1 비트 모두로 메모리의 영역을 어떻게 채우나요?

1 비트 모두로 레지스터를 채우려면 대부분의 기계에서 효율적인 방법은 두 가지 지침을 취합니다.

  1. 특수 목적 명확한 명령을 사용하여 레지스터를 지우거나 즉시 0을로드하거나 레지스터 자체를 xor하십시오.

  2. 레지스터의 비트 보완을 취하십시오.

메모리를 1 비트로 채우면 1 개 이상의 매장 지침이 필요합니다 ...

Hank Warren의 멋진 책에서 더 많은 비트짜리 팁과 요령을 찾을 수 있습니다. 해커의 기쁨.

x를 1으로 설정하십시오

x <번호 x = x * 2

답 = 번호 또는 x -1.

코드는 입력을 "번호"라고 가정합니다. 긍정적 인 값에 대해 잘 작동해야합니다. 참고 두 가지를 보완하는 음수 값의 경우 높은 비트가 항상 하나이기 때문에 작동 시도는 의미가 없습니다.

설정하십시오 -1. 이것은 일반적으로 모든 비트로 표시됩니다.

사용 T(~T(0)).

어디에 T 타이프 이름입니다 (C ++에 대해 이야기하는 경우).

이것은 원치 않는 프로모션을 방지합니다 int 유형이보다 작은 경우 int.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top