数据类型介绍
c语言数据类型介绍
c语言中数据主要分为两种,整型和浮点型,需要注意的是char类型虽然称作字符型但是存储的依然是整型数据,是将字符的asc码存储在其中的。
整型
c语言中整型主要分为
char(字符型)
unsigned char
signed char
short(短整型)
unsigned short [int]
signed short [int]
int(整型)
unsigned int
signed int
long(长整型)
unsigned long [int]
signed long [int]
这几种
其中每一种都具有无符号和有符号两种。
浮点型
float
double
构造类型
数组类型
结构体类型 struct
枚举类型 enum
联合类型 union
指针类型
int* p
char* p
float* p
void* p
原码,反码,补码
整数在计算机中的表示有三种方法,即原码反码补码,其中都分为符号位于数值位,符号位用‘0’表示正数,用‘1’表示负数。
进制
2进制,8进制,10进制,16进制都是数值的不同表示形式,其规则可以拿在生活中最常见的十进制举例。
如十进制中的5这个数字,其各位为5,表示个位的‘重量为5’,而十进制个位的值为‘10^0’,为1,即1*5。
同理可以得到十进制数字5的二进制表示形式,为101.
计算过程如图。
原码,反码,补码
原码
直接将二进制按照正负数的形式翻译为二进制
反码
将原码的符号位不变,其它位按位取反
补码
反码+1得到
举例
如十进制5的原码补码反码
00000000000000000000000000000101 --原码
011111111111111111111111111111111010 --反码
011111111111111111111111111111111011 --补码
在计算机中数据的储存和表示一律使用补码,补码在使用是可以将符号位和数值位一起处理。
举例
20---
00000000000000000000000000010100--原码
00000000000000000000000000010100--反码
00000000000000000000000000010100--补码
-10
10000000000000000000000000001010--原码
11111111111111111111111111110101--反码
11111111111111111111111111110110--补码
将20与-10进行相加。
如果使用原码进行相加的话
00000000000000000000000000010100
10000000000000000000000000001010
进行相加
10000000000000000000000000011110
为
-30
如果使用补码进行相加
00000000000000000000000000010100
11111111111111111111111111110110
进行相加
00000000000000000000000000001010
为
10
可以得出,在计算加法时如果使用原码无法将符号位和数值位统一进行处理,而使用补码进行计算时可以将符号位和数值位统一进行处理。
数据的存储顺序
大端字节序存储
把一个数据的高位字节序的内容存放在低地址处,把低位字节序的内容存放在高地址处。
11 22 33 44->11 22 33 44
小端字节序存储
把一个数据的高位字节序的内容存放在高地址处,把低位字节序的内容存放在低地址处。
11 22 33 44->44 33 22 11
大小端相关计算
使用代码判断计算机储存数据的方法
#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;
}
原理
定义一个整型数据,‘1’
二进制为
00000000000000000000000000000001
对这个数据取地址时,将其强制类型转化为char类型,这样就可以只取第一个字节的数据,为1为小端,为0为大端。
不进行强制类型转化时会解引用四个字节的数据。