C语言 中的 数据类型 超详解

  • Home
  • C语言 中的 数据类型 超详解
  • By: admin

C语言 中的 数据类型 超详解

一、整型(int、short、long、long long)

1、有符号整型

有符号整型的数据类型通常包括 int、short、long、long long 四种,因为是有符号类型,所以前面要加上 signed ,但是通常省略,也就是说在代码中直接打出 int 类型就代表是有符号类型的。

(1)int类型

数据类型大小是 4 字节,能表示的数值范围是

-2^(32-1) – 2^(32-1)-1 (即 -2147483648 ~ 2147483647)

打印类型是 %d ,使用格式为 int 名 = 值;

(2)short类型

数据类型大小是 2 字节,能表示的数值范围是

-2^(16-1) – 2(16-1) -1 (即 -32768 ~ 32767)

打印类型是 %hd ,使用格式为 short 名 = 值;

(3)long类型

数据类型大小是 4 字节,能表示的数值范围是

-2^(32-1) – 2^(32-1)-1 (即 -2147483648 ~ 2147483647)

打印类型是 %ld ,使用格式为 int 名 = 值;

(4)long long类型

数据类型大小是 8 字节,能表示的数值范围是

-2^(63) ~ 2^(63)-1 (这个数足够大了)

打印类型是 %lld ,使用格式为 long long 名 = 值;

2、无符号整型

无符号数用 unsigned 表示 ,只表示数据量,而没有方向(没有正负,且无符号数最高位不是符号位,而就是数的一部分,无符号数不可能是负数。

(1)unsigned int 类型

数据类型大小是 4 字节,能表示的数值范围是

0 – 2^(32)-1 (即 0~4294967295)

打印类型是 %u ,使用格式为 unsigned int 名 = 值;

(2)unsigned short 类型

数据类型大小是 2 字节,能表示的数值范围是

0 ~ 2^8 -1 (即 0~65535)

打印类型是 %hu ,使用格式为 unsigned short 名 = 值;

(3)unsigned long 类型

数据类型大小是 4 字节,能表示的数值范围是

0 – 2^(32)-1 (即 0~4294967295)

打印类型是 %lu ,使用格式为 unsigned long 名 = 值;

(4)unsigned long long 类型

数据类型大小是 8 字节,能表示的数值范围是

0~2^63-1

打印类型是 %llu ,使用格式为 unsigned long long 名 = 值;

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#include

#include

int main0401(void)

{

size_t var = 10;

printf("var = %u\n", var);

unsigned int a = 10u; // 简写成 unsigned int a = 10;

unsigned short b = 20u;// 简写成 unsigned short b = 20;

unsigned long c = 30Lu;

unsigned long long d = 40LLu;

printf("unsigned int 型数据值:%u\n", a);

printf("unsigned short 型数据值:%hu\n", b);

printf("unsigned long 型数据值:%lu\n", c);

printf("unsigned long long 型数据值:%llu\n", d);

system("pause");

return EXIT_SUCCESS;

}

结果,注意返回值符号

二、 字符型(char)

字符型变量用于存储一个单一字符,在 C 语言中用 char 表示,其中每个字符变量都会占用 1 个字节。在给字符型变量赋值时,需要用一对英文半角格式的单引号(’ ')把字符括起来。字符变量实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的 ASCII 编码放到变量的存储单元中。char的本质就是一个1字节大小的整型。

char 的格式匹配符(打印格式) 为:%c

数值表示范围是:

有符号: -2^(8-1) – 2(8-1) -1 (即 -128 ~ 127)

无符号: 0 ~ 2^8 -1 (即 0~255)

常用的ASCLL码为:

‘A’:65

‘a’:97(大小写相差 32 )

‘0’:48

‘\n’:10

‘\0’: 0

演示字符类型:

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#include

#include

int main(void)

{

char ch = 'A'; // 65

//printf("1 ch = %c\n", ch);

printf("1 ch = %d\n", ch);

ch = 'm'; //

//printf("2 ch = %c\n", ch);

printf("2 ch = %d\n", ch);

//ch = 97;

ch = 'a'; // 97

//printf("3 ch = %c\n", ch);

printf("3 ch = %d\n", ch);

system("pause");

return EXIT_SUCCESS;

}

运行结果:

验证大小写ASCLL码的差值是否为32:

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#include

#include

int main(void)

{

char ch = 'M';

char var = '5';

printf("ch = %c\n", ch + 32);

printf("var = %c\n", var + 4);

printf("'\\n\'的值为=%d\n", '\n');

system("pause");

return EXIT_SUCCESS;

}

结果为:

三、浮点型(float、double)

(1)单精度浮点型(float)

单精度浮点型的大小是 4 字节

float v1 = 4.345;

unsigned float v1 = 4.345; 无符号的 float 数据

格式匹配符是:%f , 默认保留 6 位小数。

(2)双精度浮点型(double)

双精度浮点型的大小为 8 字节

double v2 = 5.678;

unsigned double v2 = 5.678; 无符号的 double 数据

printf(“n = %08.3f\n”, n);

输出的含义为:显示8位数(包含小数点), 不足8位用0填充。并且保留3位小数。对第4位做四舍五入。

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#include

#include

int main(void)

{

float m = 3.145;

double n = 4.566545;

printf("m = %08.2f\n", m);

printf("n = %08.3lf\n", n);

system("pause");

return EXIT_SUCCESS;

}

结果为: