gpt4 book ai didi

c - short int 和 unsigned short 的输出?

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:26 26 4
gpt4 key购买 nike

所以我试图解释以下输出:

short int v = -12345;
unsigned short uv = (unsigned short) v;

printf("v = %d, uv = %u\n", v, uv);

Output:
v = -12345
uv = 53191

所以问题是:当这个程序在二进制补码机上运行时,为什么会产生这个精确的输出?

将值转换为 unsigned short 时,哪些操作会导致此结果?

最佳答案

我的回答假设16 位 二进制补码算法。

要求 -12345 的值,取 12345,对其求补,然后加上 1

12345 is 0x3039 is 0011000000111001.

补码就是把所有的1都变成0,把所有的0都变成1 的:

1100111111000110 is 0xcfc6 is 53190.

添加一个:53191

因此在内部,-123450xcfc7 = 53191 表示。

但是如果你将它解释为一个无符号数,它显然只是53191。 (当您将一个带符号的值分配给一个相同大小的无符号整数时,通常最终发生的是您分配了精确的位模式,而不进行任何转换。但是,稍后,您通常会以不同的方式解释该值,例如当你用 %u 打印它。)

另一种可能更简单的思考方式是 16 位 算法在 216 = 65536 处“回绕”。所以你可以想到 65536 作为 0 的另一个名称(就像 0:0024:00 都是午夜的名称)。所以 -1234565536 - 12345 = 53191

关于c - short int 和 unsigned short 的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41833699/

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