数据的基本类型:
整型 分为无符号unsigned和signchar 存储的是字符的ASCII码值,也是整数
short
int
long
long long
浮点型
float
double
构造类型
struct 结构体类型
数组
enum 枚举类型
union 枚举联合体类型
指针类型
空类型
void 用在函数的返回类型 ,指针
这些类型的意义就是不同的类型开辟的不同的空间大小,大小决定了使用范围。
整型在内存中的存储,其地址是倒着存储的
数据在内存中以二进制的形式存储
对于整数来说:
整数有三种表示形式:原码,反码,补码
其中,正整数的原码和反码还有补码相同 ,负整数的原码,反码,补码是要进行计算的
例如:-10
//
原码10000000000000000000000000001010
//
反码11111111111111111111111111110101
//
补码11111111111111111111111111110110
//
按照数据的数值直接写出的二进制序列就是原码
//
原码的符号位不变,其他位按位取反,得到的就是反码
//
反码+1,得到的就是补码
整数在内存中存储的是
补码
为什么内存中存储的补码呢?
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码和原码相互转换,其运算过程是相同的,不需要额外的硬件电路
有负数时要用补码相加
大小端存储
大端字节序:
把数据的低位字节的内容存放在高地址出,高字节序的内容存放在低地址处
小端字节:
把数据的低位字节序的内容存放在低地址处,高位字节序的内容存放在高地址处
低地址 高地址
小端存储 01 00 00 00 |
小端存储 00 00 00 01
|
现在设计一个程序来判断当前机器的字节序
#include<stdio.h>
int main()
{
int a = 1;
char* p = (char*)&a; //将整型强制转化为字符型 ,char每次只访问一个字节
if (*p == 1)
{
printf("小端\n");
}
else(printf("大端\nn");
}
整型变量
sign
和
unsigned
的区别
C语言中将基本数据类型划分为signed(有符号)和unsigned(无符号)两大类,初始化变量int a=-3等价于signed int a=-3;关键字signed可以省略,因为C语言默认就是有符号类型的
#include<stdio.h>
int main()
{
unsigned int i;
//i是无符号数,任何情况下都大于0
//所以程序死循环
for (i = 9; i >= 0; i++)
{
printf("%u\n", i);
}
return 0;
}
#include<stdio.h>
int main()
{
char a[1000]; //巧记口诀:超出范围的数据如果是正数,减去256
int i; //否则加上256
for (i = 0; i < 1000; i++)
{
a[i] = -1 - i;
}
//128+127=255
//-1 -2 -3……-127 -128 -127 126 125……3 2 1 0 -1 -2
printf("%d", strlen(a));
return 0;
}
char 类型存储数据的大小是八个字节,数值大小是-128~127
unsigned char大小是0-255;
#include<stdio.h>
int main()
{
unsigned char i = 0;
int count = 0;
for (i = 0; i <= 255; i++) //i永远小于255
{
printf("hello\n");
}
return 0;
}