我有一个角色'¿'。如果我在C中使用整数转换它,结果是-61并且在C#中使用相同的转换,结果是191.有人可以解释我原因。
C Code
char c = '¿';
int I = (int)c;
Result I = -62
C# Code
char c = '¿';
int I = (int)c;
Result I = 191
答案 0 :(得分:0)
这是表示和转换singed / unsigned数字的方式。
看起来C编译器的默认值在你的情况下使用signed byte
作为char
的基础类型(因为你要注意明确指定unsigend char
编译器的默认值是使用,见 - Why is 'char' signed by default in C++?)。
因此有符号字节191(0xBF)表示负数(最高有效位为1) - -65
。
如果您使用unsigned char
值,则会保持正面效果。
如果您的编译器为char
(即short
)提供了更广泛的类型,则无论char
是否已签名,191都将保持为正191。
在C#中始终未签名 - 请参阅MSDN char:
类型:char
范围:U + 0000到U + FFFF
因此,191总会按预期转换为int
。