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 char
和 char
仅在签名时;即在编写 C++14 时要担心的可移植性问题较少。
【参考方案1】:
char
、signed char
和 unsigned char
都是不同的类型。
您的实现可以将char
设置为signed
或unsigned
。
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 char
或unsigned char
(哪个是实现定义的,可以由编译器命令行开关控制),但char
是一个不同的类型 ,不同于signed char
和unsigned char
。
因此,如果您想确保使用unsigned char
或signed char
,请明确指定。否则无法保证会不会被签名。
【讨论】:
我最谦虚的道歉。已删除。以上是关于C语言中signed char和char有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
unsigned char 和 signed char 区别
c语言中 int,char,real,bool,const有啥区别,怎么区分使用