Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当我们给char数据类型赋值为负值时,为什么char数据类型的行为类似于int数据类型?_C++ - Fatal编程技术网

C++ 当我们给char数据类型赋值为负值时,为什么char数据类型的行为类似于int数据类型?

C++ 当我们给char数据类型赋值为负值时,为什么char数据类型的行为类似于int数据类型?,c++,C++,我知道,当我们给一个无符号的数据类型赋值时,就会存储这两个数据类型的互补值,即数据类型可以存储的最大值减去我们赋值的负值。 为了测试这一点,我编写了一个程序来说明这一点,但是我无法理解char数据类型的行为 #包括 使用名称空间std; 模板 无效比较(T a,T b) { 库特 char不是1字节无符号数据类型吗 可能,可能不是。char的符号性是由实现定义的 在您当前的实现中,它显然是经过签名的 在compare方法的输出中,显示了四个字节,因为您将输出转换为int,因此char值-4转换为

我知道,当我们给一个无符号的数据类型赋值时,就会存储这两个数据类型的互补值,即数据类型可以存储的最大值减去我们赋值的负值。 为了测试这一点,我编写了一个程序来说明这一点,但是我无法理解char数据类型的行为

#包括
使用名称空间std;
模板
无效比较(T a,T b)
{
库特
char不是1字节无符号数据类型吗

可能,可能不是。
char
的符号性是由实现定义的

在您当前的实现中,它显然是经过签名的

compare
方法的输出中,显示了四个字节,因为您将输出转换为
int
,因此
char
-4
转换为
int
-4

char不是1字节无符号数据类型吗

可能,可能不是。
char
的符号性是由实现定义的

在您当前的实现中,它显然是经过签名的


compare
方法的输出中,显示了四个字节,因为您将输出转换为
int
,因此
char
-4
被转换为
int
-4

,因此,char被签名。Intereresting.谢谢,这解决了我的困惑,但太糟糕了,我不能这样做投票赞成你的答案,说我的声誉必须是15。:p:)好吧,它可能是签名的,也可能是未签名的。这取决于实现。使用gcc和clang,你可以选择是使用命令行标志来签名还是不签名
-funsigned char
resp.
-fsigned char
。只有gcc可以选择执行ent char是有符号还是无符号?或者每个编译器都有这个选项?@RaunakMukhia实际上VS有。注意,
char
signed char
unsigned char
是三种不同的类型,而
int
signed int
是相同的。因此,char是有符号的。Intererestingad我不能投票支持你的答案,说我的声誉必须是15。:p:)好吧,它可以是签名的,也可以是未签名的。这取决于实现。使用gcc和clang,你可以选择是使用命令行标志来签名还是不签名,
-funsigned char
resp.
-fsigned char
。只有gcc可以是将字符实现为有符号还是无符号的选项?或者每个编译器都有这个选项?@RaunakMukhia实际上有。请注意,
char
signed char
unsigned char
是三种不同的类型,而
int
signed int
相同。
a:2     b:65532
a:2     b:fffc
b is greater than a
a:2     b:-4
a:2     b:fffffffc
b is greater than a
a:2     b:-4
a:2     b:fffffffc
a is greater than b
a:2     b:-4
a:2     b:fffffffc
a is greater than b