[英]Formula to determine the range of signed and unsigned data types C++
我剛剛開始使用C ++(字面意思是我的第二天),並且我被分配來計算各種數據類型的范圍,有符號和無符號。 問題是,我的學校的工作方式我不會到數學部分,他教我們另外幾個月的公式。 他說要從那些已經完成數學課程的人那里得到這些信息,但他們都表示他們會在他們有筆記的家里從事這項工作。 所以現在我和谷歌一起留在了黑暗中,而且它的答案是不確定的,所以我問你,堆棧溢出的聰明人。
獲取數據類型范圍的公式是什么? 我發現一個有效但不適用於其他的INT,他希望我們計算的是:char,short,long和long long。 他還想要那些4的無符號版本以及INT。
我們已經擁有每種數據類型的位和字節大小。
以下是我的INT范圍布局:
printf ("\nThe range of int is: %f\n", pow(2, (sizeof(int) * CHAR_BIT) -1));
std::numeric_limits<T>
您可以使用以下函數獲取這些限制的實際值:
用相應的類型替換T
代替,例如signed char
或unsigned char
。
帶有N位(使用二進制補碼 )的帶符號數的公式是
帶有N位的無符號數的公式是
char
char
具有N = 8位。 讓我們用signed char
和unsigned char
驗證這些公式。
signed char
unsigned char
實際上,這些范圍可以在<limits>
找到 - 參見參考 ,特別是模板std::numeric_limits
- 請參見此處 。 我假設你想知道那些數字來自哪里。
重要的是位數。 如果你有n
位,那么你可以用它們表達2 n個不同的值。 拿一個老派的16位整數。 對於16位,可能的不同值的數量是2 16 = 65536.如果您有無符號值,則只表示非負值。 因此,您表達的最小值為0,最大值為2 n - 1,因此16位無符號整數從0
到65535
。
如果您使用符號表示整數,那么當然您現在具有相同數量的值(前一示例中為65536)來表示一些正數和負數。 你在中間有0
,然后你在負數和正數之間分配剩余的數值。 所以你得到低端的-32768
和高端的32767
。
對於表示整數的任何其他數據類型,它是相同的模式,無論是32位,64位還是更多位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.