0
点赞
收藏
分享

微信扫一扫

有符号和无符号类型函数用例,源码反码补码的使用

代码小姐 2022-01-16 阅读 78

例一:

#include<stdio.h>
int main()
{
    /* *///
    char a = -1;
    signed char b = -1;
    unsigned char c = -1;
    printf("a=%d,c%d,c=%d", a, b, c);

    return 0;
}

输出为:

char 类型的a,b,c只占八个字节,会发生截断,所以只放8个字节的字符

当把a,b,c要变成整型变量被打印出来时,会发生整型提升

例二:

#include<stdio.h>
int main()
{
    char a = -128;
    printf("%u", a);

    return 0;
}

例三:

#include<stdio.h>
int main()
{
    int i = -20;
    unsigned int j = 10;
    printf("%d\n", i + j);
    return 0;
}

-20源码:10000000000000000000000000010100

-20烦码:111111111111111111111111111111101011

-20补码:111111111111111111111111111111101101

 10补码:00000000000000000000000000001010

-20+10补码相加:111111111111111111111111111111110110

源码:10000000000000000000000000001010(十进制-10)

例四:

#include<stdio.h>
#include<windows.h>

int main()
{
    unsigned int i;
    for(i = 9; i >= 0; i--)
    {
        printf("%u\n", i );
        Sleep(1000);
    }
    
    
    return 0;
}

当循环运行到i=0时;i--,-1后被放入一个无符号整型中,符号位被忽略读出的十进制数为4294967295,大于0进入新的循环,以此类推,i永远大于0,循环无法停止

例五:

#include<stdio.h>
int main()
{
    char a[1000];
    int i;
    for (i = 0; i <= 1000; i++)
    {

        a[i] = -1 - i;
    }
    printf("%d\n", strlen(a));

    return 0;
}

举报

相关推荐

0 条评论