C语言:整型在内存中的储存

1.数据类型详细介绍

类型的意义

1.使用这个类型开辟内存空间的大小(大小决定了使用范围)

2.如何看待内存空间的视角

类型的基本归类

整型家族:

char

        unsigned char

        signed cahr

short

        unsigned short [int]

        signed short [int]

int 

        unsigned int

        signed int

long

        unsigned long [int]

        signed long [int]

浮点数家族:

float

double 

构造类型(自定义类型):

数组类型(int [10],char [5]等等)

结构体类型 struct

枚举类型 enum

联合类型 union 

指针类型:

int* pi;

char* pc;

float* pf;

void* pv;

空类型: 

void

3(一般用作函数返回类型,函数参数,指针类型)

2.整型在内存中的储存 

原码,反码,补码

对于整数来说:

整数二进制有3种表示形式:原码,反码,补码

正整数:原码,反码,补码相同

负整数:原码:按照数值的数值直接写出的二机制

               反码:原码符号位不变,其他位按位取反

               补码:反码+1

整数在内存中存储的是补码

大端小端

大端字节序:把数据的低位字节序的内容存放在高地址处,高位字节序的内容存放在低地址处

小端字节序:把数据的高位字节序的内容存放在高地址处,低位字节序的内容存放在低地址处

3.题目练习 

题目1:设计一个小程序判断当前机器的字节序

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

题目2:

#include <stdio.h>
int main()
{
	char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("%d %d %d", a, b, c);
	return 0;
}

ps:C语言标准没有规定char到底是signed char还是unsigned char(一般编译器认为char为signed char),但是C语言标准规定int是signed int,short是signed short。

题目3:

#include <stdio.h>
int main()
{
	char a = 128;
	printf("%u", a);
	return 0;
}

ps:signed char的取值范围是:-128~127(-128的二进制序列为10000000)

题目4:

#include <stdio.h>
int main()
{
	int i = -20;
	//10000000000000000000000000010100
	//11111111111111111111111111101011
	//11111111111111111111111111101100
	unsigned int j = 10;
	//00000000000000000000000000001010
	printf("%d", i + j);
	//11111111111111111111111111110110
	//11111111111111111111111111110101
	//10000000000000000000000000001010
	return 0;
}

题目5:

#include <stdio.h>
int main()
{
	unsigned int i ;
	for (i = 9; i >= 0; i--)
	{
		printf("%u\n", i);
	}
	return 0;
}

题目6:

#include <stdio.h>
#include <string.h>
int main()
{
	char a[1000];
	int i;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;
		//11111111
		//11111110
		//...
		//10000000
		//01111111
		//...
		//00000000
		//11111111
	}
	//-1 -2 -3 ... -127 -128 127 126 125 ... 3 2 1 0 -1 -2 -3 ...
	printf("%d\n", strlen(a));//找到\0 -> 0
	return 0;
}

 题目7:

#include <stdio.h>
unsigned char i = 0;
int main()
{
	for (i = 0; i <= 255; i++)
	{
		printf("hello world\n");
	}
	return 0;
}

ps:unsigned char的取值范围是:0~255

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值