itsource

부호 있는 정수에 대한 비트 연산 결과가 정의되어 있습니까?

mycopycode 2022. 11. 24. 20:48
반응형

부호 있는 정수에 대한 비트 연산 결과가 정의되어 있습니까?

나는 의 행동이>>on signed integer는 구현에 의존할 수 있습니다(특히 왼쪽 오퍼랜드가 마이너스인 경우).

은요?~,>>,&,^,|부호 ( 「」 「」)인 .short,int,long,long long(비트 내용에 관해서는) 그 타입이 부호 없는 경우와 같은 결과가 보증되고 있습니까?

오퍼랜드의, 「」는 과 같습니다.<<되지 않은 과 그 .>>는 구현 정의(보통 "산술" 오른쪽 시프트)입니다. << ★★★★★★★★★★★★★★★★★」>>는 개념적으로 비트 연산자가 아닙니다.곱셈이나 나눗셈과 같은 산술 연산자로, 피연산자가 잘 정의된 피연산자에 대해 2의 적절한 거듭제곱을 합니다.

비트 ^,~,| , , , , 입니다.&오퍼랜드의 (프로모트)타입의 값의 비트 표현으로 동작합니다.그 결과는 부호화된 표현(two comparent, one comparent 또는 sign-size)의 각 가능한 선택에 대해 잘 정의되어 있지만, 구현에서 "네거티브 제로" 표현을 함정으로 취급할 경우 결과가 함정 표현이 될 수 있습니다.개인적으로 나는 거의 항상 비트 연산자와 함께 부호 없는 식을 사용하므로 결과가 표현보다는 값 에서 100% 명확하게 정의됩니다.

마지막으로 이 답변은 C에만 적용될 수 있습니다.C와 C++는 매우 다른 언어이며, C++에 대해서는 잘 모르지만, 이 영역들 중 일부는 C와 다를 수 있다는 것을 알고 있습니다.

  • 시프트 ★★★<< 동작이 .
  • 시프트 ★★★>> 구현 정의 결과를얻을 수 있습니다.
  • &,| ★★★★★★★★★★★★★★★★★」^연산자는 값의 비트 표현으로 정의됩니다.C의 음수 표현에는 2의 보, 1의 보, 그리고 부호 규모의 세 가지 가능성이 허용된다.구현에서 사용하는 방법은 이러한 연산자가 음수 값에 사용되는 경우의 수치 결과를 결정합니다.

부호 비트 1과 모든 값 비트0(2개의 보완 및 부호 크기) 또는 부호 비트와 모든 값 비트1(1개의 보완)을 포함한 값은 트랩 표현으로 명시적으로 허용됩니다.이 경우 이러한 값을 생성하는 연산자에 인수를 사용할 경우 동작은 정의되지 않습니다.

C89 표준에서는 비트 위치에 따라 부호화된 숫자를 왼쪽으로 전환하는 동작을 정의했습니다.서명된 유형과 서명되지 않은 유형이 모두 패딩 비트를 가지고 있지 않은 경우, 서명되지 않은 유형에 대해 필요한 동작과 서명되지 않은 양수 유형이 서명되지 않은 유형과 동일한 표현을 공유한다는 요건은 부호 비트가 가장 중요한 값의 비트 바로 왼쪽에 있음을 의미합니다.

C89에서는 패딩 비트가 없는2개의 완료 구현에서는 -1 < 1 이며 패딩 비트가 없는1개의 완료 구현에서는 -3 이 됩니다.패딩 비트를 사용하지 않는 부호 크기의 구현이 있는 경우 -1 < 1은 이들 구현의 2와 같습니다.

C99 표준은 음수 값의 좌변환을 정의되지 않은 동작으로 변경했지만, 근거에서 그 이유에 대한 단서를 제공하는 것은 아무것도 없다(또는 그 변경에 대해 언급조차 하지 않는다).C89가 요구하는 동작은 일부 구현에서는 이상적이지 않을 수 있으므로 이러한 구현이 더 나은 것을 선택할 수 있는 자유를 허용하는 것이 이치에 맞을 것이다.나는 이 기준서의 저자들이 품질 2의 보완 구현이 C89에 의해 명령된 동일한 행동을 계속 제공해야 한다고 의도하지 않았다는 증거는 보지 못했지만, 불행히도 그들은 실제로 그렇게 말하지 않았다.

비트 내용은 동일하지만 결과 값은 여전히 구현에 따라 달라집니다.

비트 연산을 사용할 때 값은 다른 수준에서 동작하기 때문에 서명된 값 또는 서명되지 않은 값으로 표시되지 않아야 합니다.

부호 없는 타입을 사용하면, 이러한 번거로움으로부터 해방됩니다.

언급URL : https://stackoverflow.com/questions/11644362/are-the-results-of-bitwise-operations-on-signed-integers-defined

반응형