programing

y -= m < 3은 무엇을 의미합니까?

bestcode 2022. 8. 21. 19:41
반응형

y -= m < 3은 무엇을 의미합니까?

C 코드의 예를 조사하던 중, 다음과 같은 것을 발견했습니다.

y -= m < 3;

이게 뭘 하는 거지?루프나 뭐 그런 걸 위해 응축된 건가요?제가 아는 한 구글 검색은 불가능합니다.

m < 3어느 쪽인가1또는0true 값에 따라 달라집니다.

그렇게y=y-1언제m<3true, 또는y=y-0언제m>=3

각 조작의 우선순위에 따라 분류하면 다음과 같이 됩니다.

y = (y - (m < 3));

m < 3평가되어 부울 결과를 반환합니다.1또는0표현은 다음과 같이 단순화할 수 있습니다.

y = y - 1; // if m < 3 is true

또는

y = y - 0; // if m < 3 is false

이 작업을 하는 목적은 이 시스템의if절을 클릭합니다.

그러니까...if (m < 3) { y -=1; },부터(m < 3)m이 3보다 작을 경우 1이고, 그렇지 않을 경우 0입니다.

이 코드는 윤년 또는 부활절, 또는 그 둘 모두에 관련된 오래된 참조 구현에 나타나 있습니다.첫 두 달은 윤일 전에 발생하기 때문에 특별합니다.그렇게 코드를 쓰는 데는 변명의 여지가 없습니다.외관이 마음에 들지 않는 한 말이죠.대부분의 사람들은 그렇지 않다.

m < 3m이 3 미만일 경우 1로 평가됩니다.따라서 이 경우 y는 1만큼 감소합니다.따라서 if 문은 회피됩니다.

가 원하는 건 말할 수 없지만 그게 뭘 위한 건지 말해줄 수 있어

m < 3부울값을 나타내는 int0 또는 1을 반환합니다.

m이 3보다 작을 경우 문장은 다음과 같이 평가됩니다.y -= 1또는y = y - 1;

m이 3보다 크거나 같으면 이 문장은 다음과 같이 평가됩니다.y -= 0또는y = y - 0. 이 경우 전체적으로 이 문장은 아무 것도 하지 않습니다.

가장 흥미로운 것은 생성되는 코드의 양입니다.심플한 Arduino 시스템(컴파일러 버전 1.8.10)에서는 원본과

y -= (m < 3 ? 1 : 0); 

동일한 코드 크기를 만듭니다.단, 'if' 버전은 다음과 같습니다.

if(m<3) {y -= 1;} 

는 실제로 8바이트 적은 코드를 만듭니다(4개의 명령 감소).특히 컴파일러가 좋은 경우, 스마트한 코드를 작성하는 것이 반드시 더 작은 코드를 가져오는 것은 아니라는 것을 보여주는 좋은 예.

<등호보다 우선도가 높다=그렇게m<3이 경우 1이 반환됩니다.m3 미만, 그 이외의 경우는 0

그러면 y = y - 1 또는 y = y - 0

코드가 다음 코드와 동등하다는 것에 동의합니다.if(m<3) y=y-1;

그러나 FALSE는 항상 0이지만 TRUE에는 몇 가지 정의가 있기 때문에 안전하지 않은 코드입니다.오늘날 TRUE는 대부분의 프로그래밍 시스템에서 1과 같았지만, 이전 시스템에서는 -1과 같았습니다(마지막 비트가 아니라 모든 비트가 켜짐으로 설정된 경우).따라서 이 코드가 오래된 플랫폼에서 실행되고 있는 경우 다음과 같이 변환될 수 있습니다.if(m<3) y=y-(-1); ★★★★★★★★★★★★★★★★★」if(m<3) y=y+1;이러한 'clever' 코드를 피해야 하는 큰 이유는 시스템 간 호환성입니다.

언급URL : https://stackoverflow.com/questions/7863285/what-does-y-m-3-mean

반응형