如果我在 C 中将短数据类型存储为 int 数据类型,关于 Signextension

About Signextension if I store short data type to int data type in C

提问人:안태찬 提问时间:4/10/2021 更新时间:4/10/2021 访问量:32

问:

我想知道如果我在 C 中将短数据类型(16 位)存储到 int 数据类型(32 位),是否会发生符号扩展。 符号扩展名意味着 int 数据类型中的前 16 位将被111111.....或 0000000.....

c

评论


答:

0赞 John Zwinck 4/10/2021 #1

你可以很容易地测试它并找出答案,但可以这样想:这个代码会做什么?

int16_t x = -1000;
int32_t y = x;

当然,其值为-1000,而不是某个正值,因此确实会发生符号扩展。y

这假设你在一台机器上,通常有二的补码算术,你肯定是。

0赞 Vlad from Moscow 4/10/2021 #2

让我们从逻辑上思考。如果将类型(16 位)的对象分配给类型(32 位)的对象,则该类型的对象应具有存储在该类型的对象中的相同值。shortintintshort

也就是说,如果存储在类型对象中的值为正数,则分配给类型对象的值也应为正数。反之亦然,如果存储在类型对象中的值为负数,则分配给该类型对象的值也应为负数。shortintshortint

因此,如果整数的值以 2-s 补码形式存储,则存储在类型对象中的值也应以 2 的补码形式存储。这意味着符号位的值在类型的对象中传播以产生 2;补充内部代表。intint

在其他形式的内部表示中,机制可以不同。