(在 C/C++ 中)
//1
int i = 1;
unsigned u = i;
//2
int i = 1;
unsigned u = (unsigned)i;
//3
unsigned u = 1;
//4
unsigned u = 1u;
gcc (4.8) 编译器在 1、2 和 3、4 之间生成的汇编代码没有区别。在编写实际代码时,(对我而言)通常使用形式 1 和 3 更方便,除非它超出正符号的范围。 (例如 3,333,333,333 表示 32 位 int)
有了这个功能,
void mpz_set_ui (mpz_t rop, unsigned long int op)
我用它作为,
mpz_set_ui(num, 3); //or an int variable in place of 3
,例如。
我对当前C(++)标准的理解是,在上述情况下没有必要明确声明为unsigned,但我不确定在某些情况下是否可能会有一些额外的任务将signed转换为unsigned ,或者当替换的有符号变量在目标无符号变量的范围内时,它总是完全相同的可执行文件。
最佳答案
转换结果不会有实际差异,隐式和显式转换做同样的事情。显式转换(在 C++ 中更可取 static_cast
)的优点是清晰:如果您编写显式转换,没有人会怀疑您是否意外更改了符号。我认为 3) 和 4) 同样好。
关于c++ - 将正符号变量替换为无符号变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25250542/