相关疑难解决方法(0)

签名/未签名比较

我试图理解为什么以下代码不会在指定的位置发出警告.

//from limits.h
#define UINT_MAX 0xffffffff /* maximum unsigned int value */
#define INT_MAX  2147483647 /* maximum (signed) int value */
            /* = 0x7fffffff */

int a = INT_MAX;
//_int64 a = INT_MAX; // makes all warnings go away
unsigned int b = UINT_MAX;
bool c = false;

if(a < b) // warning C4018: '<' : signed/unsigned mismatch
    c = true;
if(a > b) // warning C4018: '<' : signed/unsigned mismatch
    c = true;
if(a <= b) // warning C4018: …
Run Code Online (Sandbox Code Playgroud)

c++ comparison unsigned signed visual-studio-2005

77
推荐指数
4
解决办法
8万
查看次数

如果我为无符号变量赋值为负值会怎样?

我很想知道如果我给无符号变量赋一个负值会发生什么.

代码看起来有点像这样.

unsigned int nVal = 0;
nVal = -5;
Run Code Online (Sandbox Code Playgroud)

它没有给我任何编译器错误.当我运行程序时,nVal分配了一个奇怪的值!是否可以将某个2的补码值分配给nVal

c++ unsigned signed integer type-conversion

73
推荐指数
3
解决办法
8万
查看次数

从"(签名)-1"到"无符号长"的转换是否标准化?

这个答案中,你可以找到这个评论:

严格地说,在转换之前两个数字的位表示是相同的并不重要.即使使用1的补码或带符号的幅度表示,(带符号)-1到无符号长的转换也总是会产生ULONG_MAX.(转换后的位模式将相同).

我知道你可以-1用其他方式代表Two's Compliment,这是一个有效的补充,应该在我的答案中.但是,在这样的实现中,依赖转换是否安全ULONG_MAX

c++ unsigned signed specifications type-conversion

3
推荐指数
1
解决办法
136
查看次数