c语言signed char, char, unsinedchar区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言signed char, char, unsinedchar区别相关的知识,希望对你有一定的参考价值。
怎样理解 “无论char怎样实现, c语言signed char, char, unsinedchar都是不同类型, 把一种类型映射到另一种类型都需要转化”。
我不是很赞同这句话!!(1)
char 和 signed char是一个意思,没有unsigned标识,就是有符号类型
unsined char是无符号类型!
(2)
char ch='a' ;
unsigned char ch1='b' ;
无论是ch=ch1; 还是ch1=ch ;都不需要类型转化,因为它俩的大小和数据存储方式是相同的,区别只在字节的第一位如何解释的问题!
(3)
有符号类型首位表示符号,0正,1负。无符号没这说法,8位全表示数。
用这个来说类型转化是有问题的! 参考技术A 以上3种都是1个字节(8bit)的数据类型。char根据系统不同,属于signed char和unsigned char中的一种。
signed char 有符号8位数据,从-128到127的(11111111-01111111,这里的第一位是符号位)
unsigned char 无符号8位数据,从0-255(00000000-11111111)
一般char默认是 signed char。但是由于系统实现及历史遗留原因 导致部分系统或者编译器使用unsigned char,所以在转换时,最好加上强制类型转换,以免转换时出现错误。本回答被提问者采纳
C语言中signed char和char有啥区别? [复制]
【中文标题】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, unsinedchar区别的主要内容,如果未能解决你的问题,请参考以下文章
C语言中signed char和char有啥区别? [复制]