数据类型为char,其值范围为0-255

时间:2017-02-24 13:57:03

标签: c mingw

我正在查看链接data type

中的数据类型

写为char类型为1字节,范围为-128到127或0到255。

这怎么可能?默认情况下,char表示签名正确。 enter image description here

编辑:还有另一个问题Whats wrong with this C code?。但这不是同一个问题。标题说这个代码有什么问题,搜索不会轻易列出这个答案。人们必须完全分析这个问题才能理解这个问题。

编辑:看了几个答案和评论后,我又有了疑问。双引号内的字符串被视为char。如果我将双引号字符串传递给具有signed char类型参数的函数,我会收到警告。 itoa和许多其他库函数也使用char类型参数而不是signed char。当然,类型转换会避免这个问题。那么操作空终止字符串的函数的最佳参数类型是什么(例如LCD显示相关函数)?使用signed char或unsigned char(因为char是实现定义的,我猜它可能不是可移植的)

3 个答案:

答案 0 :(得分:5)

char"具有与signed charunsigned char相同的表示和对齐方式,但始终是一种独特的类型"。

答案 1 :(得分:5)

char具有实现定义的签名。这意味着一个编译器可以选择将其实现为signed,将另一个编译器实现为unsigned

这就是为什么你永远不应该使用char类型来存储数字的原因。一个更好的类型是uint8_t

答案 2 :(得分:2)

不,默认情况下它并不代表签名字符。根据C标准,char是一个与签名和无符号字符不同的类型,它只是表现得像其他两个字符中的一个。

n1570/6.2.5p15

  

char,signed char和unsigned char这三种类型统称为字符类型。实现应将char定义为具有与signed char或unsigned char相同的范围,表示和行为。

在上一段的说明中:

  

<limits.h>中定义的CHAR_MIN将具有值0或SCHAR_MIN之一,这可用于区分这两个选项。无论做出何种选择,char都是与其他两种类型不同的类型,并且与其中任何一种都不兼容。