提问人:안태찬 提问时间:4/10/2021 更新时间:4/10/2021 访问量:32
如果我在 C 中将短数据类型存储为 int 数据类型,关于 Signextension
About Signextension if I store short data type to int data type in C
问:
我想知道如果我在 C 中将短数据类型(16 位)存储到 int 数据类型(32 位),是否会发生符号扩展。 符号扩展名意味着 int 数据类型中的前 16 位将被111111.....或 0000000.....
答:
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 位)的对象,则该类型的对象应具有存储在该类型的对象中的相同值。short
int
int
short
也就是说,如果存储在类型对象中的值为正数,则分配给类型对象的值也应为正数。反之亦然,如果存储在类型对象中的值为负数,则分配给该类型对象的值也应为负数。short
int
short
int
因此,如果整数的值以 2-s 补码形式存储,则存储在类型对象中的值也应以 2 的补码形式存储。这意味着符号位的值在类型的对象中传播以产生 2;补充内部代表。int
int
在其他形式的内部表示中,机制可以不同。
评论