簡體   English   中英

用於確定有符號和無符號數據類型C ++范圍的公式

[英]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 charunsigned char

公式

帶有N位(使用二進制補碼 )的帶符號數的公式是

  • min = -1 * 2 N - 1
  • max = 2 N - 1 - 1

帶有N位的無符號數的公式是

  • min = 0
  • max = 2 N - 1

示例:8位char

char具有N = 8位。 讓我們用signed charunsigned char驗證這些公式。

  • signed char
    • min = -1 * 2 N-1 = -1 * 2 7 = -128
    • max = 2 N - 1 - 1 = 2 7 - 1 = 127
  • unsigned char
    • min = 0
    • max = 2 N - 1 = 2 8 - 1 = 255

實際上,這些范圍可以在<limits>找到 - 參見參考 ,特別是模板std::numeric_limits - 請參見此處 我假設你想知道那些數字來自哪里。

重要的是位數。 如果你有n位,那么你可以用它們表達2 n個不同的值。 拿一個老派的16位整數。 對於16位,可能的不同值的數量是2 16 = 65536.如果您有無符號值,則只表示非負值。 因此,您表達的最小值為0,最大值為2 n - 1,因此16位無符號整數從065535

如果您使用符號表示整數,那么當然您現在具有相同數量的值(前一示例中為65536)來表示一些正數和負數。 你在中間有0 ,然后你在負數和正數之間分配剩余的數值。 所以你得到低端的-32768和高端的32767

對於表示整數的任何其他數據類型,它是相同的模式,無論是32位,64位還是更多位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM