Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C int和有符号int声明之间的差异_C_Types_Int_Standards_Declaration - Fatal编程技术网

C int和有符号int声明之间的差异

C int和有符号int声明之间的差异,c,types,int,standards,declaration,C,Types,Int,Standards,Declaration,我正在阅读一些关于嵌入式编程的教程,其中一本说int和signed int是不同的,但没有解释如何或为什么 我理解为什么unsigned int和int是不同的,但是int和signed int不同对我来说是新的。这只是出于历史原因。今天,每当您声明int时,就会得到一个签名的int。即使使用今天的编译器,您也可能看到差异的唯一一点是char与signed char,它们在规格上不同(在分配文字字符串时值得注意),但在int方面,据我所知,差异仅存在于char数据类型。其中字符a可以是有符号字符

我正在阅读一些关于嵌入式编程的教程,其中一本说
int
signed int
是不同的,但没有解释如何或为什么


我理解为什么
unsigned int
int
是不同的,但是
int
signed int
不同对我来说是新的。

这只是出于历史原因。今天,每当您声明
int
时,就会得到一个
签名的int
。即使使用今天的编译器,您也可能看到差异的唯一一点是
char
signed char
,它们在规格上不同(在分配文字字符串时值得注意),但在
int

方面,据我所知,差异仅存在于char数据类型。其中
字符a
可以是
有符号字符a
无符号字符a取决于编译器选项。正如我所说的。(-签名字符)

对于int数据类型,
int
signed int
之间没有区别,这对我来说也是新鲜事。说教程在线吗?如果是这样的话,一个链接将是非常感激的。那么字符和签名字符之间的区别是什么呢?你能举个例子吗?@Anon-问题是,默认情况下,
char
signed
还是
unsigned
,都是未定义的。该标准对此只字未提。@Anon char vs signed char也是历史性的,早期的体系结构可以将其定义为其中之一,事实上,一些体系结构仅使用7位。它的实现定义了
char
是有符号类型还是无符号类型。不管是哪一种,它仍然是不同于eznme所说的
有符号字符
无符号字符
的类型。因此,该标准确实说明了这一点,它说实现需要记录是否已签名:-)“C99 6.7.2.5每个逗号分隔集都指定相同的类型,但对于位字段,说明符int是将同一类型指定为有符号int还是将同一类型指定为无符号int由实现定义。“我的意思是,如果您有int类型的位字段,那么它可以作为无符号字段或有符号字段,具体取决于实现。因此,在使用位字段时,可能需要显式指定它是有符号的还是无符号的。您可能会认为char、short、long等位字段也是如此。使用位字段显式是最安全的。+1,接受Eznme的答案,因为他/她回答得更早,与您的答案相同。
char
unsigned char
signed char
的类型不同,即使它的范围和表示形式与其中一个相同。@SteveJessop你能再解释一下吗,或者给我指一个我能读到的地方吗?@grhegde:C99标准可从以下网址获得。第6.2.5节定义了内置类型,该节第14段说,“即使实现定义了两个或更多基本类型以具有相同的表示,它们仍然是不同的类型”。C89和C11类似。