为了让函数返回值的绝对值更大,我们常常会在函数前面加上unsigned修饰,例如char类型的函数,返回值的绝对值最大为127,而unsigned char的返回值最大可以达到255。但是如果我们在unsigned char类型中返回-1,会得到什么结果呢?为什么会得到这个结果,我们一起来看一下!
代码如下:
#include <stdio.h>
unsigned char func(void)
{
char rst = -1;
return rst;
}
int main(int argc, char **argv)
{
printf("%d\n", func());
return 0;
}
上面代码的输出结果为:255
我们都知道数据在内存中是以补码的形式存储的,而 -1 的补码是 1111 1111;在内存中数据的赋值是以补码的形式赋值,当我们把负数强制赋值给一个无符号类型的数据时,会把符号位也一起赋值过去,故可得到正数的 1111 1111.(+-1的原码、反码、补码如下)
正数:
[+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]补
负数:
[-1] = [1000 0001]原 = [11111110]反 = [1111 1111]补
新手上路,如有错误请及时提出,非常感谢!