2014-11-07 15 views
5

Tôi cố gắng để sử dụng toán tử << trên long, như vậy:điều hành << không thể được áp dụng cho toán hạng kiểu dài và dài

((long) num3) << (2 + (long) num4))) 

này mang lại cho tôi những lỗi sau:

Operator << cannot be applied to operands of type long and long.

Nếu tôi không truyền num4 đến long, không có lỗi. Tuy nhiên, tôi không thể giữ nó như là một int. Có cách nào khác xung quanh việc này không?

+2

Bạn có thực sự muốn '<<', chứ không phải '<'? – Tim

+0

Tại sao bạn truyền đến 'long' trong anyways của nhà điều hành? Thực hiện thay đổi bit và truyền kết quả thành 'long'. Đã giải quyết được sự cố. – BradleyDotNET

+3

Nó không có ý nghĩa để thay đổi dài hơn 64 bit, vì vậy nhà điều hành bàn tay phải không cần phải dài. – vcsjones

Trả lời

12

Toán hạng phải là int, không phải là long. Nó sẽ không có ý nghĩa để sử dụng một số long như số bit để dịch chuyển, vì các kiểu tích phân trong C# không bao giờ có nhiều hơn 64 bit.

+5

Uh, tại sao các downvotes? Tôi đã nói gì sai? Xin vui lòng bình luận khi bạn downvote, để tôi biết những gì sai ... –

+1

Điều này là chính xác, không chắc chắn lý do tại sao bất cứ ai downvoted nó. C# spec về cơ bản nói nó trong 7.9. "loại toán hạng thứ hai phải luôn là int." với động lực giả định không được sử dụng. – vcsjones

+0

Tôi đã không bỏ phiếu .. nhưng tôi đoán rằng những gì ai đó có thể không thích về câu trả lời này, là một câu trả lời mà không biết tại sao người hỏi câu hỏi "Tôi không thể giữ nó như là một int." Do đó câu trả lời có cơ hội thấp hơn là câu trả lời "thích hợp" cho câu hỏi ban đầu .. mặc dù nó chính xác nêu rõ sự thật. Chỉ cần lý thuyết của tôi .. Tôi không thích nó, hoặc khi bất cứ điều gì là xuống bình chọn mà không có bất kỳ ý kiến ​​.. vì vậy tôi đang chia sẻ một quan điểm mà đến với tâm trí. –

Các vấn đề liên quan