一.c语言类型
内置类型
可通过#include<limits.h>查询
1.整型
char:
unsigned char-128~127;signed char0~255
short:
unsigned short[ int ]-32768~32768;signed short[ int ]0~65535
int:
unsigned int 2147483648~2147483647;signed int 0~4294967295
long
unsigned long[ int ]0~4294967295;signed long[ int ]2147483648~2147483647
2.浮点型
float3.4*10^(-38)~3.4*10^(38)
double1.7*10^(-308)~1.7*10^(308)
自定义类型
1.构造类型
数组类型 int [xxx]
结构体类型struct
枚举类型enum
联合类型union
2.指针类型
int* p
char* pc
float* pf
void* pv
3.空类型
void表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型
二.整型在内存中的存储
1.了解原码、反码、补码(cpu只有加法器)
计算机中的整型有符号数有三种表示方法:原码、反码、补码
三种表示方法均有符号位和数值位两部分,符号位都是用“0”表示正数 “1”表示负数
注:无符号的原码、反码、补码相同;有符号数的正数的原码、反码、补码相同
原码
直接将二进制按照正负数的形式翻译为二进制就可以了
反码
将原码的符号位不变,其他位次依次按位取反
补码
反码加一
计算机中存的是二进制的补码 但是显示的是十六进制
一个字节=8个比特位=8个二进制位=2个16进制位
三.浮点型在内存中的存储
float、double、long double
浮点数表示的范围:float.h中定义
以下代码看得整型和浮点型的存储方式是不同的
#include<stdio.h>
int main()
{
int n=9;
float* pFloat=(float*)&n;
printf("n的值为:%d\n",n);
printf("pFloat的值为:%f\n",*pFloat);
*pFloat=9.0;
printf("num的值为:%d\n",n);
printf("pFloat的值为:%f\n",*pFloat);
return 0;
}
结论就是浮点数形式存就按浮点数形式取。整数形式存,按整数形式取,不要搞混了
四.大小端介绍
数据在内存中存储字节的一个顺序
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中
例题:(面试题)请简述大端字节和小端字节序的概念,设计一个程序来判断当前机器的字节序
(面试题)请简述大端字节和小端字节序的概念,设计一个程序来判断当前机器的字节序
#include<stdio.h>
int check_sys()
{
int a=1;
return *(char*)&a;
//返回1:小端
//返回0:大端
}
int main()
{
//返回1:小端
//返回0:大端
int ret=check_sys();
if(ret==1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
补充:指针类型的意义:决定了指针解引用操作能访问几个字节;决定了指针+1 -1时改变的字节