[英]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類型的對象的最小值
-127signed char SCHAR_MAX類型的對象的最大值
+127unsigned char UCHAR_MAX類型的對象的最大值
255char CHAR_MIN類型的對象的最小值,見下文
char CHAR_MAX類型的對象的最大值,請參見下文
對於任何支持的語言環境MB_LEN_MAX,多字節字符中的最大字節數
1short int SHRT_MIN類型的對象的最小值
-32767short int SHRT_MAX類型的對象的最大值
+32767unsigned short int USHRT_MAX類型的對象的最大值
65535int INT_MIN類型的對象的最小值
-32767int INT_MAX類型的對象的最大值
+32767unsigned int UINT_MAX類型的對象的最大值
65535long int LONG_MIN類型的對象的最小值
-2147483647long int LONG_MAX類型的對象的最大值
+2147483647unsigned 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 int
和int
最小范圍是相同的 - 所以問題仍然存在: 為什么short int
和int
不同的? 我什么時候應該選擇其中一個?
提供int
的原因是提供一種類型,該類型旨在匹配所討論的硬件上的“最有效”整數類型(仍然滿足所需的最小范圍)。 int
是您應該在C中使用的通用小整數類型 - 它應該是您的默認選擇。
如果你知道你需要的范圍超過-32767到32767,你應該選擇long int
或long long int
。 如果要存儲大量的小整數,這樣空間效率比計算效率更重要,那么您可以選擇short
(或者甚至是有signed char
,如果您知道您的值將適合-127到127范圍) 。
C和C ++僅對其對象進行最小大小保證。 沒有確切的尺寸保證。 你不能依賴類型short
正好是2個字節,只能它可以保存指定范圍內的值(所以它至少是兩個字節)。 int
類型至少與short
一樣大,通常更大。 需要注意的是signed int
是一個冗長的方式說int
而signed short int
是一個冗長的方式說short int
這是一個冗長的方式說short
。 除了char
類型(某些編譯器將使其無符號)之外,默認情況下會對所有內置整數類型進行簽名。 short int
和long int
類型分別表示short
和long
較長方式。
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.