如果我将unsigned int赋给signed int,可以有未初始化的位

问题描述 投票:0回答:1

我有一个无符号整数(比如32位),当我将它赋给有符号整数时,转换后是否可以在有符号整数中保留未初始化的位。

unsigned int i = 10 
int j = i;

我从valgrind那里得到一个错误,说明未经过初始化的字节

int func(long,int,int);

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

c++ valgrind bit unsigned signed
1个回答
3
投票

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

此外,由于字节是最小可寻址单元,因此不能仅将值分配给字节中的某些位。这是全有或全无。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.