C将Short Int转换为Unsigned Short

黑麦

C中的short int包含16位,而第一位表示该值是负还是正。我有一个如下的C程序:

int main() {
    short int v;
    unsigned short int uv;
    v = -20000;
    uv = v;
    printf("\nuv = %hu\n", uv);
    return 0;
}

由于v的值为负,我知道变量的第一位是1。因此,我希望程序的输出等于uv = 52,768 b / c 20,000 +(2 ^ 15)= 52,768

相反,我得到uv = 45536作为输出。我的逻辑的哪一部分不正确?

甲肾上腺素

您所看到的行为可以通过C的转换规则来解释:

6.3.1.3有符号和无符号整数

1将整数类型的值转换为以外的其他整数类型时_Bool,如果该值可以用新类型表示,则该值不变。

2否则,如果新类型是无符号的,则通过重复添加或减去比新类型可表示的最大值多一个值来转换该值,直到该值在新类型的范围内为止。

(此报价来自C99。)

-20000不能用an表示,unsigned short因为它是负数。目标类型是无符号的,因此通过重复添加65536(是USHORT_MAX + 1),直到它在range:-20000 + 65536is之,来转换该值45536

请注意,此行为是C标准规定的,与内存中负数的实际表示方式无关(特别是,即使在使用符号/幅值或“ 1”的机器上,其工作方式也相同)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将int加到short

将int转换为unsigned short Java

将short []转换为灰度图像

将char转换为short

在应用按位运算符“〜”之后,从“ int”转换为“ unsigned short”

将无符号字符转换为int和short

将int转换为16位非单值short

为什么将unsigned short(乘)无符号short转换为signed int?

在C#中将Short [2]转换为Int32

C#如何将short []转换为bool []?

C ++是否允许将任何整数文字隐式转换为short int?

如何将int []转换为short []?

在Python中将bytearray转换为short int

从'int'类型转换为'short unsigned int'可能会改变其值[-Wconversion]

将QByteArray转换为unsigned short:与预期不符

如何检查将char * []转换为unsigned short的溢出

C ++:从wchar_t *转换为unsigned short *是否安全?

在C#中减去整数时出现错误“无法将int隐式转换为short”

将unsigned short *强制转换为unsigned int *

在C中将unsigned char数组转换为signed short

如何在C ++中将unsigned int转换为两个unsigned short?

使用格式说明符%d和%u将类型转换〜0转换为(unsigned int)和(unsigned short),对于short产生相同的结果,但对于int产生不同的结果

如何在C中将int转换为short int?

将short转换为VariantType(从short提取VariantType)

如何将nullable int强制转换为nullable short?

C ++中unsigned int与unsigned short的区别

将 char* 转换为 short*

在 C 中将 short 转换为 int 时的值更改

如何将 unsigned short 7273 转换为 ascii HI