논리 연산의 결과를 더할 수 있습니까? I가 0보다 큰 수를 계산하려면은 논리 연산의 결과를 더하기 위해 정의 된 동작입니다.
내가? 같은 것을 할 수있는 (또는 더 나은 방법은 무엇입니까?)
int a[3] = {1,-5,3};
int result = 0;
for(int i = 0 ; i<3; i++)
{
result += a[i]>0;
}
논리 연산의 결과를 더할 수 있습니까? I가 0보다 큰 수를 계산하려면은 논리 연산의 결과를 더하기 위해 정의 된 동작입니다.
내가? 같은 것을 할 수있는 (또는 더 나은 방법은 무엇입니까?)
int a[3] = {1,-5,3};
int result = 0;
for(int i = 0 ; i<3; i++)
{
result += a[i]>0;
}
는 C11
장 §6.5.8 (강조 광산 인용) 연산자 <
(미만)의
각각,
>
(보다)<=
(또는 그 미만)과 동일하고,>=
(보다 크거나 같음) 은 지정된 관계가 참일 경우1
이고, 거짓 인 경우0
이됩니다. 107) 결과는int
입니다.
그런 다음 당신은
사업자+=
를 들어만
-=
이 중 왼쪽 피연산자는, 원자 자격 또는 자격이 포인터되어야한다고 요구되는 복합 대입을 수행하고 완전한 객체 유형으로, 그리고 권리는 정수형을 가진다. 또는 왼쪽 피연산자는 원자, 수식어 또는 규정되지 않은 산술 형식이어야하며 오른쪽은 은 산술 형식이어야합니다.
귀하의 표현식이 제약 조건을 충족합니다.
네, 정의 된 동작입니다. 구문 관점에서, 당신이 있기 때문에 기본의 안전 해요 말했다
는 operator precedence 당신의 기대와 일치합니다. 그러한 문제는 없지만 명백한 (따라서 확실한) 결코 상처를주지는 않습니다.
당신은
result += (a[i] > 0);
표준의 관련 부분을 머리 꼭대기 어디에서 찾을 수 있는지 알고 있습니까? 어떻게 빨리 할 수 있습니까? ^^ –
@ 카미 카제 모든 운영자 그룹은 6.5 장에 나열되어 있으므로 pdf를 열고 관련 그룹을 클릭하면됩니다 :) – Lundin
@Lundin 다음 책을 버릴 것입니다. 나는 대신 전체 표준을 읽고 읽고 싶다. 그런 식으로 어디서 무엇을 찾을 수 있는지 알 수 있습니다. –
으로 식을 다시 작성할 수 있습니다'A [내가]> 0 '이 0 또는 1 인 예는 정의입니다. –
예 완벽하게 훌륭한 코드입니다. 관계 연산자와 같은 모든 부울 연산은 값이 1 또는 0 인 'int'를 반환하도록 보장됩니다. – Lundin