相关疑难解决方法(0)

为什么0 <-0x80000000?

我有一个简单的程序:

#include <stdio.h>

#define INT32_MIN        (-0x80000000)

int main(void) 
{
    long long bal = 0;

    if(bal < INT32_MIN )
    {
        printf("Failed!!!");
    }
    else
    {
        printf("Success!!!");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

条件if(bal < INT32_MIN )总是如此.这怎么可能?

如果我将宏更改为:

#define INT32_MIN        (-2147483648L)
Run Code Online (Sandbox Code Playgroud)

有谁可以指出这个问题?

c signed numeric-conversion numeric-limits

251
推荐指数
6
解决办法
2万
查看次数

C中的无符号十六进制常量?

C是否处理十六进制常量(例如0x23FE)和signed或unsigned int?

c hex unsigned signed constants

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

使用0xffffffff按位和无符号长整数

下面是switch语句中的一些代码.getvalue()返回一个unsigned long.有人可以解释为什么value是按位的0xffffffff.mcu是32位.

#define WriteMemory(A,V) *(volatile unsigned long*)(A)=(V)
static unsigned value;

case 'b':
value = getvalue();
value &= 0xffffffff;
WriteMemory(2147455555, value);
break; 
Run Code Online (Sandbox Code Playgroud)

c bit-manipulation

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