이것은 프로그래밍 문제가 아닌 언어 디자인에 가깝습니다. 왼쪽 피연산자의 촉진 종류 만 오른쪽 피연산자의 다섯 최하위 비트가 이동량으로서 사용된다 int
인 경우C#/Java와 같은 고급 언어가 비트 시프트 수 피연산자를 마스크하는 이유는 무엇입니까?
:
다음 JLS 15.19 Shift Operators에서 발췌 .
왼쪽 피연산자의 수준 올리기 유형이
long
인 경우 오른쪽 피연산자의 하위 6 자리 비트 만 이동 거리로 사용됩니다.
이 동작
도 specified in C#이며, (거기에 하나의 경우) 자바 스크립트의 공식 스펙에 있는지 잘 모르겠어요 동안, 적어도 내 자신의 테스트를 기반으로 또한 사실이다. 이동 때이 규격은 기본 하드웨어 만 카운트 피연산자에 5 비트 걸린다는 사실에 의해 아마 "영감"이라고 이해(1 << 32) == 1
32 비트 :
결과는 다음에 해당하는 것입니다 값 (예 : 64 비트의 경우 6 비트)을 사용하여 JVM 수준에서 지정된 동작을 이해할 수 있지만 C# 및 Java와 같은 고급 언어는 왜 다소 낮은 수준의 동작을 유지합니까? 하드웨어 구현을 넘어 추상적 인 관점을 제공하고보다 직관적으로 행동해야합니까? (다른 방향으로 이동하기 위해 음수를 취할 수 있다면 더 좋을 것입니다!)
언어의 수준이 높은지 아닌지에 대한 결정은 매우 주관적입니다. 그러나 대부분의 사람들은 적어도 스크립팅 언어가 아닌 경우 Java와 C#을 "높음"으로 분류 할 것이라고 생각합니다. – polygenelubricants
물론입니다. 그러나 Java와 C#은 효율성을 위해서 (또는 적어도 _perceived efficiency_) 저수준 특성을 유지합니다. 32- 비트 int 형과 시프트 수 마스킹은 그러한 특성이다. Scheme과 같은 다른 언어는 그 문제에서 "상위 수준"입니다. –
http://therighttool.hammerprinciple.com/statements/this-is-a-high-level-language – starblue