gpt4 book ai didi

c++ - 有人可以解释 char 的签名是如何特定于平台的吗?

转载 作者:可可西里 更新时间:2023-11-01 15:35:18 25 4
gpt4 key购买 nike

我最近读到两者之间的区别

char
unsigned char

signed char

特定于平台。
我不太明白这个?这是否意味着位序列可以因平台而异,即平台 1 的符号是第一位,平台 2 的符号可能在末尾?您将如何针对此进行编码?

基本上我的问题来自看到这一行:

typedef unsigned char byte;

我不明白标牌的相关性?

最佳答案

假设您的平台有八位字节,并假设我们有位模式 10101010。对于 signed char,该值为 −86。但是,对于 unsigned char,相同的位模式表示 170。我们没有移动任何位;它是相同的位,以两种不同的方式解释。

现在为 char。该标准没有说明这两种解释中哪一种应该是正确的。保存位模式 10101010char 可能是 either −86 170。它将是其中之一两个值,但是您必须先了解编译器和平台,然后才能预测它将是哪个。一些编译器提供了一个命令行开关来控制它将是哪个。一些编译器根据它们运行的​​操作系统有不同的默认值,因此它们可以匹配操作系统约定。

在大多数代码中,这真的无关紧要。出于重载的目的,它们被视为三种不同的类型。指向其中一种类型的指针与指向另一种类型的指针不兼容。尝试使用 signed char*unsigned char* 调用 strlen;它不会起作用。

当您需要单字节有符号数字类型时使用signed char,而当您需要单字节无符号数字类型时使用unsigned char。当你想保存字符时,使用普通的旧 char 。这就是程序员在编写您询问的 typedef 时的想法。名称“byte”没有保存字符数据的含义,而名称“unsigned char”的名称中有“char”一词,这导致一些人认为它是保存字符的好类型,或者最好将它与 char 类型的变量进行比较。

由于您不太可能对字符进行一般算术运算,因此在您使用的任何平台和编译器上 char 是有符号还是无符号都无关紧要。

关于c++ - 有人可以解释 char 的签名是如何特定于平台的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1211982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com