关于char、unsigned char 的一些知识,如何判断机器的大小端

    xiaoxiao2025-08-02  15

    关于 signed 和 unsigned int 

    在计算机解析在这个数的时候认为它存在符号位或者不存在符号位。

    (1)判断一个机器的大小端

     

    #include<stdio.h> #include<stdlib.h> #if 1 int check_sys() { int i = 1; return (*(char *)&i); } int main() { int ret = check_sys(); if (1 == ret) printf("小端\n"); else printf("大端\n"); system("pause"); return 0; }

    看一个机器是大端还是小端就要看它里面数据的存储方式,小端是低位存在底地址中,可以看到将int *强转成char *,那么机器只会读一个字节八个比特位。然后解引用,看其实0还是1.

    在这强调一句话,提升补得是符号位。

    char a = -1; signed char b = -1; unsigned char c = -1; printf("%d,%d,%d\n", a, b, c); printf("%x,%x,%x\n", a, b, c); printf("%u,%u,%u\n", a, b, c); //char 的-1是8个1 输出int 有符号时是整型提升补符号位,即补26个1,输出是-1 //signed char 是有符号 还是1111 1111 和上面的一样 //unsigned char 首先进行截断,1111 1111 输出时整型提升 无符号 那么补28个0 //输出255 //输出无符号整数时,最高位不能当做符号位,当成普通的位

     

    char a = -128; char b = 128; //128 1000 0000 //-128 11111111 11111111 11111111 11111111 11111111 11111111 11111111 10000000 //首先截断,都是1000 0000,无符号补24个0‬ printf("%u,%u\n", a, b);

    int i = -20; unsigned int j = 10; printf("%d\n", i + j > 0);

     

    unsigned 与signed 相加的时候结果视为unsigned。 

     

    最新回复(0)