2014-10-15 3 views
-1

내가 그 대답을 알고 싶어한다는 약간의 질문.정수 양수 또는 음수 검사

if (n > 0) 
else 

그러나 나는 또한과 같이 비트 단위 연산자를 사용할 수 있습니다 : 나는 정수를 가지고 있고 그것이 부정적 또는 긍정적인지 알고 싶은 경우 , 내가 할 것

if (n >> (sizeof(int) * 8 - 1) == 0) 
else 

성능이 차이점은? ASM을 모르므로 해체를 보는 것이 실제로 도움이되지는 않을 것이므로 예/아니오 답변 만 찾고 있습니다.

+1

언어 태그를 추가하십시오. – Jens

+0

해체를 보았습니까? 여기에 붙여 넣을 수 있다면 그 차이를 분석하는 것이 도움이 될 것입니다. –

+1

'n >> 7 == 0'은 정수가 8 비트 인 경우에만 작동하며 대부분 8 비트입니다. 컴파일러가 일반적으로 처리 할 때 걱정할 필요가없는 일종의 최적화입니다.하지만 어떤 언어를 사용하고 있는지 전혀 알지 못하기 때문에 ... – Coda17

답변

1

대답은 전적으로 컴파일러에 의존한다는 것입니다.

일반적으로 컴파일러가 똑똑하고 놀라운 일을하기 때문에 C 코드의 성능에 대한 intuiting은 오류가 발생하기 쉽습니다.

주어진 환경에서 성능에 신경을 쓰면 측정해야합니다.

3

성능 차이가 있습니까? ... 그래서 나는 단지/아무 대답

간단한 예를 예스 찾고하지있어/아무 대답이 없다 "없는, 그냥하지 않습니다." 컴파일러가 이러한 미세 최적화를 처리합니다. 이 가능한 한 효율적으로 n > 0을 구현하도록 프로그래밍되어야합니다.

무엇이든간에, yould는 비트 시프트 해킹으로 그것을 혼란에 빠뜨리고 차선의 무언가를 생산하지만, 나는 진심으로 의심합니다. 무슨 뜻인지 적어두고 최적화 알고리즘을 작성한 전문가에게 마이크로 최적화 비트를 남겨 둡니다.

+1

나는 NO가 실제로 "바보 같은 짓을하지 않는다"는 의미는 차이가 없다고 생각합니다. – doron

+0

그냥 재미있게 만들려면 컴파일러가 최적화하지 않고 n이 휘발성이 있다고 가정합시다 – dikson231

+2

@ dikson231 최적화되지 않은 코드의 토론 성능은 무의미합니다. 그것은 참가자가 장기 배분을 계산하도록함으로써 가장 빠른 주자를 결정하는 것과 같습니다. – Angew

0

ARM의 CPSR 레지스터는 부호있는 연산과 부호없는 연산 모두에 대해 하나 이상의 검사 비교를 허용합니다. 즉, 두 번째 버전은 첫 번째 버전보다 느리고 (단어 크기가 변경 될 때 안정성이 떨어집니다) 의미합니다. (here 참조). 나는 인텔이 다른 점은 상상할 수 없다.

+0

IE 그의 질문에 대한 대답은 "네, 상황에 따라 다르지만 차이가있을 수 있습니다. – GreenAsJade

관련 문제