2010-08-17 24 views
9

Trong limits.h, có #defines cho INT_MAXINT_MIN (và SHRT_ * và LONG_ * vv), nhưng chỉ UINT_MAX.Giá trị di động cho UINT_MIN là gì?

Tôi có nên xác định UINT_MIN bản thân mình không? Là 0 (số không dương) có phải là giá trị di động không?

+1

+1 để quan tâm đủ về tính di động và tính chính xác để yêu cầu. –

+3

Tôi nên đưa ra -1 cho vô nghĩa muốn loại bỏ "số ma thuật" 0. Nhưng oh tốt. –

+1

"Số không dương"? – jamesdlin

Trả lời

2

Nếu bạn muốn "an toàn", bạn có thể sử dụng 0U, vì vậy nếu bạn sử dụng nó trong một biểu thức, bạn sẽ có các quảng cáo chính xác đến unsigned.

+0

Vì vậy, tôi nên '#define UINT_MIN + 0U' trong' limits.h'? –

+1

Nghĩ về nó, có lẽ không phải là một ý tưởng hay khi có một tập tin có cùng tên như một tập tin chuẩn hoặc để lộn xộn xung quanh với sau này. Tôi sẽ đặt nó ở một nơi khác. Nếu bạn muốn có một '+' đến '0U' (tại sao?), Bạn nên có toàn bộ trong ngoặc đơn' (+ 0U) 'vì nếu không bạn có thể có các hiệu ứng không mong muốn khi' + 'có thể được hiểu là bổ sung. –

+0

Bạn không cần dấu ngoặc đơn. Ngay cả trong '1 + UINT_MIN', nó sẽ mở rộng thành' 1+ + 0U', đó là một biểu thức chính xác. Macro mở rộng xảy ra ở cấp độ mã thông báo, và sẽ không dán hai tấm ván lại với nhau. – MSalters

19

Đây là một số nguyên unsigned - theo định nghĩa giá trị nhỏ nhất có thể của nó là 0. Nếu bạn muốn có một số biện minh bên cạnh cảm giác chỉ chung, các standard nói:

6.2.6.2 loại Integer

  1. Đối với các loại số nguyên không dấu khác ngoài unsigned char, các bit của biểu diễn đối tượng sẽ được chia thành hai nhóm: bit giá trị và bit đệm (không cần phải có bất kỳ giá trị nào sau này). Nếu có các bit giá trị N, mỗi bit phải đại diện cho một công suất khác nhau 2 từ 1 đến 2^(N −1), sao cho đối tượng thuộc loại đó có khả năng biểu thị các giá trị từ 0 đến 2^() N −1) sử dụng biểu diễn nhị phân thuần túy; điều này được gọi là biểu diễn giá trị. Các giá trị của bất kỳ bit đệm nào không được chỉ định.
+3

yêu tiêu chuẩn. đặc biệt là khi nó được trích dẫn. –

+0

Điều này không trả lời được câu hỏi của tôi. –

+0

@Ariel, nó không trả lời câu hỏi của bạn như thế nào? Giá trị tối thiểu cho một loại unsigned được xác định bởi tiêu chuẩn là 0. –

7

Bạn có thể sử dụng std::numeric_limits<unsigned int>::min().

+0

Điều này sẽ không hoạt động trong C/C++. –

+2

Điều này sẽ làm việc trong C++, và điều này sẽ không hoạt động trong C. C/C++ là gì? –

+0

Cây nguồn của chúng tôi chứa C và C++ và vì vậy điều này cần phải làm việc với cả hai. Đây là lý do tại sao tôi gắn thẻ câu hỏi với cả hai. –

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