如果我将unsigned int分配给signed int,可以有单位化的位吗

时间:2019-04-18 12:22:55

标签: c++ valgrind bit unsigned signed

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

unsigned int i = 10 
int j = i;

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

处观察到未初始化的字节
int func(long,int,int);

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

1 个答案:

答案 0 :(得分:3)

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

此外,因为字节是最小可寻址单元,所以不能将值仅分配给字节中的某些位。是全有还是全无。

仅可以通过Unoptimized model ------ Accuracy score on testing data: 0.8419 F-score on testing data: 0.6832 Optimized Model ------ Final accuracy score on the testing data: 0.8418 Final F-score on the testing data: 0.6828 char *来分配变量的特定字节。例如:

memcpy

假设unsigned char c[] = { 1, 2 }; int j; memcpy(&j, c, sizeof(c)); 是4个字节,则仅写入int的前2个字节,而后2个未初始化。