1) Nếu một toán hạng có loại ulong
, trong khi toán hạng còn lại thuộc loại sbyte/short/int/long
thì lỗi biên dịch xảy ra. Tôi không thấy logic trong việc này. Do đó, tại sao lại là ý tưởng tồi cho cả hai toán hạng được thăng cấp thành loại double
hoặc float
?Thay vì lỗi, tại sao cả hai toán hạng đều không được thăng hạng hoặc tăng gấp đôi?
long L = 100;
ulong UL = 1000;
double d = L + UL; // error saying + operator can't be applied
to operands of type ulong and long
b) Trình biên dịch ngầm chuyển đổi int
đen vào byte
loại và gán giá trị dẫn đến b
:
byte b = 1;
Nhưng nếu chúng ta cố gắng gán một chữ kiểu ulong
gõ long
(hoặc với các loại int
, byte
v.v.), trình biên dịch báo cáo lỗi:
long L = 1000UL;
Tôi nghĩ rằng trình biên dịch sẽ có thể tìm ra liệu kết quả của biểu thức liên tục có thể phù hợp với biến loại long
?!
cảm ơn bạn
"Để trả lời câu hỏi được đánh dấu (1) - thêm thời gian đã ký và chưa ký có thể là một sai lầm". Trong ví dụ của tôi mà có thể là trường hợp. Nhưng với ví dụ phức tạp hơn, UL có thể có nhiều biểu thức trong đó giá trị kết quả cũng phải dương và do đó UL là loại ulong sẽ có ý nghĩa. Nhưng sẽ rất lạ khi các lập trình viên cũng sử dụng biến UL sau này trong mã (do đó sau những biểu thức mà giá trị kết quả là dương) trong các biểu thức như double "d = L + UL" Uh, thậm chí tôi không chắc chắn nếu lý luận của tôi có ý nghĩa gì – flockofcode