2015-12-14 11 views
6

Tôi muốn khẳng định rằng một unsigned int là hoàn toàn tích cực. Tôi đang tranh luận giữa hai tùy chọn sau:Là uint hoàn toàn tích cực

unsigned int i = 1; 
assert(i > 0); /*option 1*/ 
assert(i != 0); /*option 2*/ 

Tôi thấy mình bị kẹt trong tình trạng khó xử Buridan's ass. Có lý do nào để thích cái này hơn cái kia không?

+3

'unsigned int' có thể là' 0'. – birryree

+1

Tôi biết. Đó là lý do tại sao tôi cần phải khẳng định. –

+0

Nó vẫn có thể là 0 – ColdSteel

Trả lời

6

assert(i > 0); dễ đọc hơn đối với các lập trình viên khác mà i được chọn cho số nguyên dương và bao gồm cả trường hợp cho i = 0.


Lưu ý: Như Joachim chỉ trong comment của mình rằng hãy ghi nhớ rằng nếu vĩ mô NDEBUG đã được xác định tại thời điểm <assert.h> đã được bao gồm ngoái, macro assert() tạo ra không có mã số, và vì thế không có gì ở tất cả .

3

tôi thích

assert(i > 0); /*option 1*/ 

Đối với 2 lý do.

Trước hết, đó là một ký tự ít hơn và các ký tự tốn tiền.

Thứ hai nếu ý định của bạn là hiển thị số này là hoàn toàn tích cực, điều này làm cho nó rõ ràng ngay cả khi không biết rằng tôi là một int không dấu.

+0

Vâng, bạn sẽ cần phải biết nó là unsigned, vì vậy bạn biết bạn sẽ không phải kiểm tra cho các giá trị tiêu cực. –

+1

Quan điểm của tôi là nếu tôi muốn con số này là hoàn toàn tích cực, nó hoàn toàn tích cực với tùy chọn 1 cho dù số lượng là unsigned hay không. Với tùy chọn 2, nó cũng hoàn toàn tích cực nhưng tôi cần một thông tin bổ sung để xác nhận rằng khi nhìn vào mã. –

2

Cả hai chắc chắn tạo mã tương tự như vậy bất cứ điều gì truyền đạt mục tiêu tổng thể các chức năng của là sự lựa chọn tốt hơn:

unsigned int i = ...; 
assert(i > 0); /*option 1*/ 
assert(i != 0); /*option 2*/ 

Lựa chọn 1 tác phẩm tốt hơn trong hầu hết các trường hợp vì nó là một sự khẳng định tích cực: những gì nên giá trị được so với những gì nó không nên. Thông thường, điều này dễ hiểu hơn. Ngoài ra khi tính chất số học của i đang được thử nghiệm, đây là con đường để đi.

Tùy chọn 2 hoạt động tốt hơn trong các trường hợp giới hạn khi i chỉ được sử dụng cho số không hoặc không khác - đặc biệt nếu đó là tập hợp các bit logic có giá trị số học không liên quan.

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