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