簡體   English   中英

short signed int和signed int之間有什么區別

[英]what is the difference between short signed int and signed int

我在c上引用了一個教程,我發現signed int和short signed int范圍是-32768到32767,它是2個字節,是它們的任何區別,如果不是那么為什么使用兩種聲明。

它是特定於平台的 - 在此上下文中您可以確定的是sizeof(int) >= sizeof(short) >= 16 bits

您的問題的最佳答案可以在ANSI的ANSI標准中找到,第2.2.4.2節 - 數值限制 為方便起見,我在此復制了該部分的相關部分:

2.2.4.2數值限制

符合要求的實施應記錄本節規定的所有限制,應在標題和規定中規定。

“整體類型的大小”

下面給出的值應替換為適用於#if預處理指令的常量表達式。 它們的實現定義值的大小(絕對值)應等於或大於顯示的值,並帶有相同的符號。

  • 最小對象的最大位數,不是位字段(字節)CHAR_BIT 8

  • signed char SCHAR_MIN類型的對象的最小值
    -127

  • signed char SCHAR_MAX類型的對象的最大值
    +127

  • unsigned char UCHAR_MAX類型的對象的最大值
    255

  • char CHAR_MIN類型的對象的最小值,見下文

  • char CHAR_MAX類型的對象的最大值,請參見下文

  • 對於任何支持的語言環境MB_LEN_MAX,多字節字符中的最大字節數
    1

  • short int SHRT_MIN類型的對象的最小值
    -32767

  • short int SHRT_MAX類型的對象的最大值
    +32767

  • unsigned short int USHRT_MAX類型的對象的最大值
    65535

  • int INT_MIN類型的對象的最小值
    -32767

  • int INT_MAX類型的對象的最大值
    +32767

  • unsigned int UINT_MAX類型的對象的最大值
    65535

  • long int LONG_MIN類型的對象的最小值
    -2147483647

  • long int LONG_MAX類型的對象的最大值
    +2147483647

  • unsigned long int ULONG_MAX類型的對象的最大值
    4294967295

未廣泛實現的C99添加了以下數字類型:

  • long long int類型對象的最小值LLONG_MIN -9223372036854775807 // - (263 - 1)
  • long long int類型的對象的最大值LLONG_MAX +9223372036854775807 // 263 - 1
  • unsigned long long int類型的對象的最大值ULLONG_MAX 18446744073709551615 // 264 - 1

其他幾個答案正確引用了C標准,該標准在類型上設置了最小范圍。 但是,正如您所看到的那樣, short intint最小范圍是相同的 - 所以問題仍然存在: 為什么short intint不同的? 我什么時候應該選擇其中一個?

提供int的原因是提供一種類型,該類型旨在匹配所討論的硬件上的“最有效”整數類型(仍然滿足所需的最小范圍)。 int是您應該在C中使用的通用小整數類型 - 它應該是您的默認選擇。

如果你知道你需要的范圍超過-32767到32767,你應該選擇long intlong long int 如果要存儲大量的小整數,這樣空間效率比計算效率更重要,那么您可以選擇short (或者甚至是有signed char ,如果您知道您的值將適合-127到127范圍) 。

C和C ++僅對其對象進行最小大小保證。 沒有確切的尺寸保證。 你不能依賴類型short正好是2個字節,只能它可以保存指定范圍內的值(所以它至少是兩個字節)。 int類型至少與short一樣大,通常更大。 需要注意的是signed int是一個冗長的方式說intsigned short int是一個冗長的方式說short int這是一個冗長的方式說short 除了char類型(某些編譯器將使其無符號)之外,默認情況下會對所有內置整數類型進行簽名。 short intlong int類型分別表示shortlong較長方式。

signed int至少與short signed int一樣大。 在大多數現代硬件上, short int是2個字節(如您所見),而常規int是4個字節。 較舊的體系結構通常具有2字節的int ,這可能是導致混淆的原因。

還有一個long int ,通常是4或8個字節,具體取決於編譯器。

請閱讀以下有關簽名字符的expalination,然后我們將討論signed / unsigned int。

首先,我想為您的問題准備背景。
................................................

char數據類型有兩種類型:

無符號字符;

簽名字符;

(即INTEGRAL DATATYPES)

.................................................

按照不同的書籍進行操作:
char 1byte -128到127(即默認簽名字符)

簽名字符1byte -128到127

unsigned char 1byte 0到255

.................................................

還有一件事1byte = 8位。(零到第7位)

由於處理器標志寄存器保留第7位用於表示符號(即1 = + ve&0 = -ve)


-37將表示為1101 1011(最高有效位為1),

+37將表示為0010 0101(最高有效位為0)。


.................................................

類似地,對於char,最后一位默認為signed


這就是為什么?

因為char也依賴於特定字符的ASCII碼(例如,A = 65)。


在任何情況下,我們都使用char並僅使用7位。

在這種情況下,為了將char / int的內存范圍增加1位,我們使用unsigned char或unsigned int;

謝謝你的提問。

類似地,對於4bit int或2bit int,我們需要signed int&unsigned int

這取決於平台。

Int在32位系統上為32位寬,在64位系統上為64位寬(我確信情況確實如此)。

我在c上引用了一個教程,我發現signed int和short signed int范圍是-32768到32767,它是2個字節。

這是一個非常古老的教程。 根據Paul R的回答,現代C標准。 在32位架構上,通常:

    short int is 16 bits
          int is 32 bits
     long int is 32 bits
long long int is 64 bits

在16位機器上,int的大小通常只有16位。 如今,16位機器可能僅限於嵌入式設備。

在16位機器上,尺寸amay是這樣的:

    short int is 16 bits
          int is 16 bits
     long int is 32 bits
long long int is 64 bits

暫無
暫無

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

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