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 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, unsinedchar区别的主要内容,如果未能解决你的问题,请参考以下文章

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

unsigned char 和 signed char

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

C语言 请问signed char,unsigned char,short,unsigned sh

C语言中的char具体用法

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