如果我将无符号 int 分配给有符号的 int,是否可以有单位化位

Can there be unitialized bits if I assign unsigned int to signed int

本文关键字:int 是否 单位 符号 无符号 分配 如果      更新时间:2023-10-16

>我有一个无符号整数(比如 32 位(,当我将其分配给有符号整数时,转换后有符号整数中是否可以留下未初始化的位。

unsigned int i = 10 
int j = i;

我从 valgrind 收到一个错误,说在

int func(long,int,int);

我在第三个参数中看到一个未签名的 int 被传递给这个 func。我怀疑这种无符号签名的转换会导致此 valgrind 错误

赋值时,赋值在右侧,而不是在右边的对象表示。 因此,在赋值变量后,永远不会有未初始化的位(或字节(。

此外,由于字节是最小可寻址单位,因此不能仅为字节中的某些位赋值。 要么全有,要么全无。

如果通过char *或通过memcpy完成,则只能分配给变量的特定字节。 例如:

unsigned char c[] = { 1, 2 };
int j;
memcpy(&j, c, sizeof(c));

假设一个int是 4 个字节,那么只有 j 的前 2 个字节被写入,最后 2 个字节保持未初始化状态。