C语言中,对基本类型操作时数据的溢出

本文通过一个具体的C语言示例介绍了char类型数据溢出的现象及其表现形式,并详细解释了不同输出格式下溢出后的数值如何被解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言中,对基本类型操作时数据的溢出:

以char类型为例,如下图所示:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(int argc, char *argv[])
{
	char ch = 0;
	/*此时已经超出了char类型的正数范围,进位使得得到的结果被表示为负数。
	这样的结果显然是不符合数学逻辑的。*/
	ch = 0x7f + 2;//0111 1111 + 0000 0010 = 1000 0001
	/*当使用十六进制输出时,输出结果为计算后得到的二进制原码的十六进制表示。
	只不过是采用了4字节的int类型进行输出的。*/
	printf("十六进制:%x\n", ch);
	/*当按照十进制有符号数进行输出时,计算结果则会被计算机依照原码规则,
	顺理成章的理解为负数。*/
	printf("十进制有符号:%d\n", ch);
	/*按照十进制无符号数进行输出时,要将负数时前面的一去掉,保留原来单字节时的原码
	进行十进制无符号输出。*/
	printf("十进制无符号:%u\n", ch&0x000000ff);//129
	
	system("pause");
	return 0;
}

注意1:只要知道char类型数据与出后结果的原码,就不难得到三个输出的答案。

注意2:当小类型的数据做大类型输出时,若为正数,前面不变;若为负数,前面所有位置补一。如上所示,要在int类型中得到char类型的负数原码,就要使用逻辑乘法,去掉前面的1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值