关于int、 unsigned int、 char、 short int在内存中的存储

首先我们应该知道:

int在win32内存中占四个字节,以%d输出时有符号数则要去除一个符号位,可以表示的数据范围是-2^31~(2^31)-1.

在16位中,用高位置1来表示负数,int型占两个字节共16位,32768的二进制是10000000,00000000,高位为1,系统会认为是 负数,所以32768需要用长型表示,占四个字节。最高位就不是1了。

unsigned int 也占四个字节在32位系统中,占四个字节能表示的数据是0~(2^31)-1

char在win32中占1个字节,能表示的数据范围是-128~127

unsigned char在win32中占1个字节,能表示的数据范围是0~255

#include<stdio.h>
#include<stdlib.h>
int main()
{
	char a = 0x80;
	unsigned int b = 0x80;
	unsigned int c = a;
	int d = a;
	printf("%d\n", sizeof(unsigned int));//unsigned int 占四个字节
	printf("a=%d,a=%u\n", a, a);
	printf("b=%d,b=%u\n", b, b);
	printf("c=%d,c=%u\n", c, c);//char 0x80 占一个字节,一个字节有符号输出时是-128-127,无符号是0-256
	//所以有符号时是-128而不是128。
	printf("d=%d,d=%u\n", d, d);
	//00000000 00000000 00000000 00000010 2
	//11111111 11111111 11111111 11111101 
	//11111111 11111111 11111111 11111110 -2
	//00000000 00000000 00000000 10000000 0x80
	//11111111 11111111 11111111 01111111 
	//11111111 11111111 11111111 10000000 0x-80
		
	system("pause");
	return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string>
int main()
{
#if 0
	int i=0;
	char str[1000];
	for (i = 0; i < 1000; i++)
	{
		str[i] = -1 - i;//str[255]
		//含义是当i=?的时候使得str[i]=0;str[i]是char只能存储一个字节那么1 0000 0000,就是0
		//1 0000 0000的十进制数是256,所以strlen是255.
	}
	printf("%d\n", strlen(str));
	//从第一个字符开始到‘\0’结束\0对应的ASCII码值是0(本身是字符数组),找到0就是找到了\0
	//-1-255=-256
	//265  1 0000 0000
	//-256 1 0000 0000
#endif
	int a = 0x11223344;
	short int b = a;
	char c = a;
	printf("%x,%x,%x\n", a, b, c);
	printf("%d\n", sizeof(short int));//short int两个字节
	system("pause");
	return 0;
}

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值