在unsigned char类型的函数中返回负数

    为了让函数返回值的绝对值更大,我们常常会在函数前面加上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]补

新手上路,如有错误请及时提出,非常感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值