시간이 많이 흘러서 바뀌었을지도 몰라 조사를 해 봐야 겠지만, 묻는 학생들이 많아서 아는대로 우선 말해주고 자세히 찾아보라고 했던 내용이다.
비트 연산(|, &)는 정수값, 논리값이 다 올 수 있다. 또 한쪽이 맞더라도 모든 식을 평가하기 때문에 ++ 같은 애들을 조심해서 써야한다. 논리연산(||, &&)은 논리값만 올 수 있고 Short Circuit으로 왼쪽 결과만으로 연산 결과를 알 수 있을 때 오른쪽은 평가 하지 않는다.
일전에 임베디드 할 때 printf 같은 녀석은 파라미터 결합이 뒤에서 부터 결합되어서 ++ 연산자를 파라미터에 쓴 것이 큰 화근이 된 기억이 난다. 당연히 왼쪽부터 결합될 줄 알았는데...
printf("%d %d %d %d", ++i, ++j, ++i); //뒤쪽부터 결합되는 경우 뒤에 값(i)이 더 작다. j는 더미.
요즘엔 멋있게 보이려고 한줄에 다 때려넣어서 최대한 코드 짧게 만들려고 안하기 때문에 별 고려할 사안은 아니다. 어차피 컴파일러가 어떻게 최적화 해주는지 다 파악하지 못하고, 수많은 컴파일러 옵션이 뭐가 있는지도 모른다면 논란이 될 코드보다는 줄 수가 많아도 명확한 코드를 생산하는게 좋다.
시간 날 때 뒤지기 좋은 사이트(어감이 영...)
적은김에 추가로... 자바에 >>> 연산자 있다.
>> 의 경우 0으로 채워지는데 음수의 경우 1로 채워진다. >>> 는 무조건 0으로 채워진다.
<<<는 없다.
System.out.println(""+ (-8>>1) ); 는 -4 가 나오고
System.out.println(""+ (-8>>>1) ); 2147483644 (이건 확신이 없어 실행시켜 봤다. 정확하다.)
임베디드 안하니 별로 쓸 일은 없겠지만 비트 연산 할 때 다시 깊이 조사해 볼 필요성을 알려둔다. 필요한 프로젝트에서 필요한 컴파일러 버전과 플랫폼등의 특성을 조사하고 덤벼야 한다. 뭐, 관련 프로젝트 하기 전에는 굳이 알 필요 없다. 그냥 이런게 있구나~ 하고 알면 된다.
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.