2015-02-17 15 views
5
long long llIdx = foo(); 
if (llIdx > 0LL) // Can I use 0 here? 
    ... 

Có vấn đề gì nếu tôi sử dụng 0 thay vì 0LL ở mã trên?So sánh lâu dài với 0

Khi nào tôi nên thích 0LL hơn 0?

+0

'long long' là loại' signed'. Nó không tạo ra sự khác biệt nếu bạn viết 'x> 0ll' hoặc' x> 0', vì '0' được tự động thăng tiến thành' long long'. – kay

+0

http://stackoverflow.com/questions/13275136/which-initializer-is-appropriate-for-an-int64-t –

+0

Trên thực tế, "ký kết" của 'long long' không quan trọng đối với trường hợp cụ thể này. Nếu so sánh là 'llIdx> = 0' (hoặc' 0LL'), vì vị từ đó sẽ luôn đúng với 'unsigned long long'. – kdopen

Trả lời

10

Có, bạn có thể sử dụng đồng bằng 0 tại đây. Trình biên dịch sẽ xem xét loại của mỗi đối số để > và quảng bá kích thước nhỏ hơn sao cho chúng có cùng kích thước.

Vì vậy, llIdx > 0llIdx > 0LL tương đương nhau.

+0

"Trình biên dịch sẽ xem xét kiểu của mỗi đối số cho'> 'và quảng bá một đối số nhỏ hơn để chúng có cùng kích thước." Đó là lý do tại sao tôi không đưa bình luận của tôi như một câu trả lời. Có một loạt các trường hợp đặc biệt nếu dấu của cả hai số nguyên thay đổi. – kay

+1

Không thấy bình luận của bạn khi tôi đang gõ :) Tôi chỉ đang cố gắng trả lời câu hỏi cụ thể hơn một chút "có". Và tôi đoán bạn có nghĩa là "ký kết", không phải "ký" – kdopen

+0

Vì vậy, khi chúng ta nên sử dụng '0LL' thay vì' 0'? – Deqing

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