Đây là thiết kế ngôn ngữ nhiều hơn là một câu hỏi lập trình.Lý do ngôn ngữ cấp cao như mặt nạ C#/Java toán hạng bit shift là gì?
Sau đây là một đoạn trích từ JLS 15.19 Shift Operators:
Nếu kiểu thúc đẩy của toán hạng bên trái là
int
, chỉ có năm bit bậc thấp nhất của toán hạng bên phải được sử dụng như là khoảng cách dịch chuyển .Nếu loại được thăng hạng của toán hạng bên trái là
long
, thì chỉ sáu bit bậc thấp nhất của toán hạng bên phải được sử dụng làm khoảng cách dịch chuyển.
Hành vi này cũng là specified in C# và mặc dù tôi không chắc liệu nó có trong thông số chính thức cho Javascript (nếu có), điều này cũng đúng dựa trên thử nghiệm của riêng tôi ít nhất.
Hậu quả là sau đây là đúng:
(1 << 32) == 1
Tôi hiểu rằng đặc điểm kỹ thuật này có lẽ là "soi" bởi thực tế là phần cứng cơ bản chỉ mất 5 bit cho các toán hạng số khi chuyển 32-bit các giá trị (và 6 bit cho 64-bit), và tôi có thể hiểu hành vi đó được chỉ định ở cấp JVM chẳng hạn, nhưng tại sao các ngôn ngữ cấp cao như C# và Java giữ lại hành vi ở mức độ thấp này? Không nên họ cung cấp một cái nhìn trừu tượng hơn ngoài việc thực hiện phần cứng và hành xử trực quan hơn? (Thậm chí tốt hơn nếu họ có thể tính số âm có nghĩa là dịch chuyển theo hướng KHÁC!)
Việc xác định liệu một ngôn ngữ có cao cấp hay không là rất chủ quan, tôi hiểu. Tuy nhiên, tôi nghĩ rằng hầu hết mọi người sẽ phân loại Java và C# thành "cao", ít nhất là đối với các ngôn ngữ không viết kịch bản. – polygenelubricants
Tuyệt đối. Nhưng Java và C# vẫn giữ lại các đặc tính ở mức độ thấp, vì lợi ích của hiệu quả (hoặc ít nhất là hiệu suất _perceived_). Loại 'int' 32 bit và mặt nạ đếm số thay đổi là những đặc tính như vậy. Các ngôn ngữ khác, chẳng hạn như Đề án, là "cấp cao hơn" trong vấn đề đó. –
http://therighttool.hammerprinciple.com/statements/this-is-a-high-level-language – starblue