【问题标题】: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 时要担心的可移植性问题较少。

标签: c


【解决方案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,请明确指定。否则无法保证会不会被签名。

    【讨论】:

    • 我最谦虚的道歉。已删除。
    猜你喜欢
    • 2019-06-10
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2020-07-29
    • 2014-02-15
    • 2015-01-17
    • 2016-06-20
    相关资源
    最近更新 更多