y -= m < 3은 무엇을 의미합니까?
C 코드의 예를 조사하던 중, 다음과 같은 것을 발견했습니다.
y -= m < 3;
이게 뭘 하는 거지?루프나 뭐 그런 걸 위해 응축된 건가요?제가 아는 한 구글 검색은 불가능합니다.
m < 3
어느 쪽인가1
또는0
true 값에 따라 달라집니다.
그렇게y=y-1
언제m<3
이true
, 또는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 < 3
m이 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이 반환됩니다.m
3 미만, 그 이외의 경우는 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
'programing' 카테고리의 다른 글
Java에서 변수 인수를 사용하는 메서드에 배열을 인수로 전달할 수 있습니까? (0) | 2022.08.21 |
---|---|
C의 printf 함수 코드 (0) | 2022.08.21 |
VueJ - Vue가 정의되어 있지 않습니다. (0) | 2022.08.21 |
vue 3에서 vuex 모듈을 사용하는 방법 (0) | 2022.08.21 |
VueJ는 부모로부터 자녀 컴포넌트의 데이터에 액세스합니다. (0) | 2022.08.21 |