>백엔드 개발 >C++ >C에서는 왼쪽으로 이동하는 음수 동작이 정의되지 않았지만 C에서는 잘 정의되어 있습니까?

C에서는 왼쪽으로 이동하는 음수 동작이 정의되지 않았지만 C에서는 잘 정의되어 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-24 20:13:17973검색

Is Left Shifting a Negative Number Undefined Behavior in C but Well-Defined in C  ?

정의되지 않은 동작: 음수 왼쪽 피연산자를 사용한 왼쪽 시프트

ISO C99 표준에 따르면 비트 왼쪽 시프트 연산(<< )는 왼쪽 피연산자가 음수 값을 가질 때 정의되지 않은 동작을 호출합니다. 이는 표준에서 왼쪽 피연산자가 부호 있는 유형이고 음수가 아닌 값을 갖는 경우 결과는 왼쪽 피연산자와 2의 시프트 양의 곱이며 표현할 수 있는 최대값보다 모듈로 1 더 감소하도록 요구하기 때문입니다. 결과 유형에 있습니다. 그렇지 않은 경우 동작은 정의되지 않습니다.

C의 잘 정의된 동작

C와 달리 C는 음수 왼쪽 피연산자를 사용하는 왼쪽 시프트 연산에 대해 잘 정의된 동작을 보장합니다. . ISO C -03 표준은 결과가 왼쪽 피연산자에 2를 곱하고 시프트 양의 거듭제곱을 곱하고 표현 가능한 최대 값에 1을 더한 모듈로 감소함을 지정합니다. 이렇게 잘 정의된 동작은 음수 값을 이동하는 경우에도 예측 가능한 결과를 허용합니다.

C의 잘 정의된 동작에 대한 정당성

ISO C 위원회의 동작 정의 결정 음의 왼쪽 피연산자를 사용하는 왼쪽 시프트는 비트 조작 및 정수를 포함한 다양한 시나리오에서 예측 가능한 결과에 대한 욕구에 의해 주도되었을 가능성이 높습니다.

왼쪽 음수 피연산자를 사용한 구현 정의 오른쪽 시프트

왼쪽 음수 피연산자를 사용한 비트 오른쪽 시프트 연산(>>)은 구현에 따라 정의됩니다. 이는 동작이 표준에 의해 지정되지 않고 컴파일러 구현자의 재량에 달려 있음을 의미합니다. 일반적으로 대상 플랫폼과 특정 컴파일러 구현에 따라 다릅니다.

위 내용은 C에서는 왼쪽으로 이동하는 음수 동작이 정의되지 않았지만 C에서는 잘 정의되어 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.