Khi lập trình bằng ngôn ngữ C giống như kiểu số nguyên "mặc định" của một người là int hoặc uint/unsigned int? Theo mặc định, tôi có nghĩa là khi bạn không cần số âm nhưng một trong hai nên dễ dàng đủ lớn cho dữ liệu bạn đang nắm giữ. Tôi có thể nghĩ ra những lý lẽ tốt cho cả hai:Loại int mặc định: Đã ký hoặc Chưa ký?
đã ký: Hành vi tốt hơn về mặt toán học, ít khả năng xảy ra hành vi lạ nếu bạn cố gắng xuống dưới 0 trong một số trường hợp ranh giới mà bạn không nghĩ đến, thường tránh trường hợp góc lẻ tốt hơn.
unsigned: Cung cấp thêm một chút bảo đảm chống tràn, chỉ trong trường hợp giả định của bạn về các giá trị là sai. Phục vụ dưới dạng tài liệu mà giá trị được biểu thị bằng biến nên không bao giờ là là số âm.
Trên thực tế, tôi nghĩ rằng chương trình khuyến mãi loại C khiến * ký * ints hoạt động khác với một người có thể mong đợi. Unsigned ints hoạt động tốt, nếu bạn biết số học modulo, trong khi int đã ký có hành vi phụ thuộc vào triển khai thực hiện và chuyển đổi buồn cười khắp nơi. Nhưng nếu bạn chỉ sử dụng một, để tránh trộn chúng, nó sẽ phải được ký kết. Vì vậy, tôi đồng ý với kết luận rằng int unsigned không nên được sử dụng willy-nilly, nhưng thực sự tôi nghĩ rằng vòng xuống không nên được sử dụng willy-nilly hoặc ... –
Nó đã được một thời gian rất dài kể từ khi GCC không thể cảnh báo rằng 'unsigned> = 0' như thường lệ. Hướng dẫn của Google là gây hiểu nhầm ở mức tốt nhất, nguy hiểm nhất, vì một kiểu rất phổ biến và rất chính xác cho một vòng lặp lặp sẽ là loại không dấu 'size_t'. Kiểm tra chính xác cho dòng chảy chưa được ký khi đếm lùi bằng bộ đếm gốc không là 'i! = ~ 0U'. –