tyf1218405122 发表于 2022-3-22 17:05:08

关于signed 与 unsigned

#include <stdio.h>

int main(void)
{
        unsigned int i=-1;
        printf("%d\n",i);
        if(i<=0)
        {
                printf("****\n");
        }
        else
        {
                printf("%d\n",i);
                printf("%%%%\n");
        }
       
}


\n\n\n\n\n\n


#include <stdio.h>

int main(void)
{
        signed int i=-1;
        printf("%d\n",i);
        if(i<=0)
        {
                printf("****\n");
        }
        else
        {
                printf("%d\n",i);
                printf("%%%%\n");
        }
       
}


第一个代码为什么if判断是假的呢?

jhq999 发表于 2022-3-22 17:57:05

本帖最后由 jhq999 于 2022-3-22 17:58 编辑

unsigned int i=-1;//-1=0xffffffff,i=0xffffffff=4294967295

傻眼貓咪 发表于 2022-3-22 18:05:35

因为你已经声明 i 为 unsigned,无符整型,永远不会低于 0。
你定义 i = -1 低于 0,因为溢出,所以变成 4294967295(unsigned 的最大值),试试打印便知:
#include <stdio.h>

int main()
{
    unsigned i = -1;
    printf("%u", i);
    return 0;
}4294967295

zzxhh628 发表于 2022-3-23 08:47:54

unsigned是无符号数,就是说没有符号,没有负数部分;signed是有符号的,有负数部分。unsigned声明的变量不能是负数,即使你用一个负数初始化它的结果也不是负数(见楼上),所以它判断肯定是假的。
页: [1]
查看完整版本: 关于signed 与 unsigned