C语言中signed char和char有啥区别? [复制]

Posted

技术标签:

【中文标题】C语言中signed char和char有啥区别? [复制]【英文标题】:What is difference between signed char and char in C language? [duplicate]C语言中signed char和char有什么区别? [复制] 【发布时间】:2018-05-08 05:14:00 【问题描述】:

我在遗留的嵌入式代码中看到人们使用带符号的字符作为返回类型。有什么必要在那里签名?这不是暗示 char 只不过是带符号的 char。

【问题讨论】:

在嵌入式目标的编译器中很常见,char 是无符号的。 @Mehrdad 这个骗子是针对不同的编程语言的。 @user694733:看看second answer。 我使用了我认为更好的 C 答案副本。虽然,C 和 C++ 在这里并没有什么不同。 @Lundin:他们确实有一点不同。 C++14 及更高版本要求 2 的补码 signed charchar 仅在签名时;即在编写 C++14 时要担心的可移植性问题较少。 【参考方案1】:

charsigned charunsigned char 都是不同的类型。

您的实现可以将char 设置为signedunsigned

unsigned char 具有标准设置的不同范围。简单地使用char 的问题在于您的代码在不同平台上的行为可能不同。它甚至可以是 1 的补码或带符号的幅度类型,范围为 -127 到 +127。

【讨论】:

【参考方案2】:

因为候选重复答案中没有人引用规范中的正确段落:

6.2.5 [类型],第 15 段

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

所以 char 也可以。 (FWIW,我相信我在 JNI 中遇到了 char = unsigned char。)

【讨论】:

我选择了一个不同的副本来关闭。如果您愿意,可以复制/粘贴此答案并将其发布到那里。 那个骗子回答了一个稍微不同的问题。回答这个问题已经足够接近了,但实际上不需要任何更多的贡献。 您可能会找到其他方法将更常见的编译器(大多数)切换到unsigned char【参考方案3】:

来自CppReference:

字符类型

signed char - 用于有符号字符表示的类型。 unsigned char - 输入无符号字符表示。也用于检查对象表示(原始内存)。 char - 字符表示类型。等效于signed charunsigned char(哪个是实现定义的,可以由编译器命令行开关控制),但char 是一个不同的类型 ,不同于signed charunsigned char

因此,如果您想确保使用unsigned charsigned char,请明确指定。否则无法保证会不会被签名。

【讨论】:

我最谦虚的道歉。已删除。

以上是关于C语言中signed char和char有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

unsigned char 和 signed char 区别

unsigned char 和 signed char

c语言中 int,char,real,bool,const有啥区别,怎么区分使用

在C语言中,unsigned char是啥类型

unsigned char 与 char 有啥却别?何时适用

unsigned和signed char