整理5种数据类型以及与之对应的格式控制符,在本文末尾附上5种数据类型下的格式控制符运用代码。
一、整型int(integer)
- int a 代表在内存中开辟一块小区域,称为 a,用来存放整数,a 一般被称为变量。
- 变量 a 所占内存大小,在不同的系统中是不一样的,64位系统典型的大小是4个字节。
- 变量 a 有固定的大小,因此也有取值范围,典型的范围是:-2147483648到2147483647
1、变量的定义和赋值:
%d int 整型
%hd short 整型,h代表half,即一半的存储字节
%ld long 整型
%lld long long 整型
%u 无符号整型
%hu 无符号short整型
%lu 无符号long 整型
%llu 无符号long long 整型
二、浮点型(float、double)
- 概念:用来表达小数的数据类型
- 全称:floating point
- 语法:
- 单精度浮点型(float),典型尺寸是4字节
- 双精度浮点型(double),典型尺寸是8字节
- 长双精度浮点型(long double),典型尺寸是16字节
%f // 单精度浮点型
%lf // 双精度浮点型
%Lf // 长双精度浮点型
%6.1f // 右对齐并占用宽度为6,保留一位的小数的浮点数
%e,%E 转换浮点数为十进制指数记法。 // 比较少用 1234 == 1.234*10的3次方
%a,%A 转换浮点数为十六进制记法。 // 基本不用
%g,%G 转换浮点数为十进制小数或十进制指数记法,依赖于值和精度。// 基本不用
三、字符型(char)
- 概念:用来描述字符的数据类型,是一个字节的int型
- 全称:character
- 语法:
%c // 单个字符型
%o // 八进制
%x // 十六进制
%#o // 输出带有0前缀的的八进制数 012
%#x // 输出带有0x前缀的十六进制数 0x12
四、字符串型(character string)
-
- 在内存中实际上是多个连续字符的组合
- 任何字符串都以一个 ‘\0’ 作为结束标记,例如:“funny story” 的内存如下
%s // 字符串类型
%-10s: // 左对齐并占用宽度为 10 的字符串;
%10s: // 右对齐并占用宽度为 10 的字符串;
五、布尔型数据(bool)
- 概念:布尔型数据只有真、假两种取值,非零为真,零为假。
- 注意:
-
- 逻辑真除了 1 之外,其他任何非零数值都表示逻辑真,等价于 1。
- 使用布尔型 bool 定义变量时需要包含系统头文件 stdbool.h。
- 布尔型数据常用于逻辑判断、循环控制等场合。
六、常量和变量
- 概念:不可改变的内存称为常量(该内存可读不可写),可以改变的内存称为变量(该内存可读可写)
- 变量的类型:int型、char型、float型、double型、字符串型、布尔型等(还有他们无符号、短、长拓展型)
- 常量的类型:
七、示例代码
1、int型:输出不同数据类型的int的值和其对应的数据大小
#include <stdio.h>
int main(int argc, char const *argv[])
{
// 1、整型(signed int, unsigned int)(integer)
int num1 = 100; // signed int 有符号
printf("int num1 value == %d\n", num1);
printf("int num1 size == %lu\n", sizeof(num1)); // sizeof可以计算数据返回的数据类型的大小(sizeof返回的类型是long unsigned int数据类型的)
unsigned int num2 = 200;
printf("unsigned int num2 value == %u\n", num2);
printf("unsigned int num2 size == %lu\n", sizeof(num2));
// 2、短整型(short int, unsigned short int)
printf("\n");
short num3 = 300;
printf("short int num3 value == %hd\n", num3);
printf("short int num3 size == %lu\n", sizeof(num3));
unsigned short num4 = 400;
printf("unsigned short int num4 value == %hu\n", num4);
printf("unsigned short int num4 size == %lu\n", sizeof(num4));
// 3、长整型(long int, unsigned long int) // 注意:long在32位系统下:4个字节, 64位系统下:8个字节
printf("\n");
long num5 = 500;
printf("long int num5 value == %ld\n", num5);
printf("long int num5 size == %lu\n", sizeof(num5));
unsigned long num6 = 600;
printf("unsigned long int num6 value == %lu\n", num6);
printf("unsigned long int num6 size == %lu\n", sizeof(num6));
// 4、长长整型(long long int, unsigned long long int) // 注意:long long在32位系统、64位系统下:都是8个字节
printf("\n");
long long num7 = 700;
printf("long long int num7 value == %lld\n", num7);
printf("long long int num7 size == %lu\n", sizeof(num7));
unsigned long long num8 = 800;
printf("unsigned long long int num8 value == %llu\n", num8);
printf("unsigned long long int num8 size == %lu\n", sizeof(num8));
}
2、float型:输出不同数据类型的float的值和其对应的数据大小
#include <stdio.h>
int main(int argc, char const *argv[])
{
// 1、单精度浮点型
float f1 = 3.14;
printf("f1 = %f\n", f1);
printf("f1 = %10.1f\n", f1); // 正数10表示右对齐(即一共打印10个数据,数据靠右, 左对齐默认(或加个-(负数)))
// .1表示打印的数据只保留1位小数
printf("f1(size) == %lu\n", sizeof(f1));
// 2、双精度浮点型
printf("\n");
double f2 = 114.114;
printf("f2 = %lf\n", f2);
printf("f2 = %-10.1lf\n", f2);
printf("f2(size) == %lu\n", sizeof(f2));
// 3、长双精度浮点型(32位系统:12个字节, 64位系统:16个字节)
printf("\n");
long double f3 = 6.18;
printf("f3 = %Lf\n", f3);
printf("f3 = %-10.1Lf\n", f3);
printf("f3(size) == %lu\n", sizeof(f3));
// 笔试题
if (f1 == 3.14) // 小数常量,默认是以64位(8个字节)内存来存放的 (float型的精度是32位(4个字节), 小数常量的精度是64位(8个字节),不够数据比较,所以不等)
{
printf("f1 等于 3.14\n");
}
else
{
printf("f1 不等于 3.14\n");
}
if (f2 == 114.114) // double型的精度是64位(8个字节), 小数常量的精度是64位(8个字节),数据刚好够比较,所以相等
{
printf("f2 等于 114.114\n");
}
else
{
printf("f2 不等于 114.114\n");
}
if (f3 == 6.18) // long double型的精度是16个字节, 小数常量的精度是64位(8个字节),数据足够比较,所以相等
{
printf("f3 等于 6.18\n");
}
else
{
printf("f3 不等于 6.18\n");
}
return 0;
}
3、char型:输出不同数据类型的char的值和其对应的数据大小
#include <stdio.h>
int main(int argc, char const *argv[])
{
// 1、打印字符(字符 == 单字节的整型数)
char ch1 = 'a'; // 单引号表示字符
char ch2 = 105; // 可以直接给字符类型赋整型数(因为字符类型本质上就是一个整型数(单字节))
int ch3 = 106;
printf("ch1 == %d\n", ch1); // 将这个字符变量ch1,以十进制数形式输出
printf("ch2 == %c\n", ch2); // 以字符形式,打印这个ch2变量的值
printf("ch3 == %c\n", ch3); // 以字符形式,打印这个ch3变量的值
// 2、字符打印格式(其它格式)
char ch4 = 88;
printf("ch4(字符) == %c\n", ch4); // 打印字符
printf("ch4(十进制) == %d\n", ch4); // 打印十进制数据
printf("ch4(八进制) == %o\n", ch4); // 打印八进制数据
printf("ch4(十六进制) == %x\n", ch4); // 打印十六进制数据
printf("ch4(八进制) == %#o\n", ch4); // 打印八进制数据
printf("ch4(十六进制) == %#x\n", ch4); // 打印十六进制数据(0123456789abcdef,小写)
int num = 110110;
printf("ch4(十六进制) == %#X\n", num); // 打印十六进制数据(0123456789ABCDEF,大写)
return 0;
}
4、字符串型(charactor string):输出不同数据类型的字符串的值和其对应的数据大小
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
// 1、定义字符串
char ch1 = 'a'; // 单引号''表示字符
char buf1[16] = "nihao"; // 双引号""表示字符串(推荐初学者表示字符串时,使用buf数组来表示)
char *p1 = "shijie"; // 指针指向字符串常量区
printf("buf1 = %s\n", buf1); // 为什么可以刚刚好将字符串打印完全呢??(因为每一个字符串的末尾都有一个结束标记符'\0',函数printf遇到这个结束标记符,就会停止打印)
printf("p1 = %s\n", p1);
// 2、字符串的显示位置控制
printf("buf1(字符串左对齐) == %-10sfanggong\n", buf1);
printf("p(字符串右对齐) == %10s\n", p1);
// 笔试题1:
char buf2[5] = "nihao"; // 不是字符串(不建议这么写,因为nihao字符已经占了5个字节了,没有'\0'存放的空间)
char buf3[6] = "nihao"; // 是字符串
// 笔试题2:strlen和sizeof的区别
// a、sizeof是一个运算符,能够计算出变量的字节大小,对于字符串来说,sizeof会把字符串最后的那个'\0'字符也计算进去
printf("sizeof(buf3) == %lu\n", sizeof(buf3));
// b、strlen是一个函数,是C语言标准字符串库里面提供的一个计算字符串长度的函数,遇到'\0'就会结束
printf("strlen(buf3) == %lu\n", strlen(buf3));
// 笔试题3:内存题
buf1[0] = 'a'; // 可以赋值(因为赋值的地方是数组,数组的内存处在栈区(可读可写的区域))
// *(p1+0) = 'a'; // 不可以赋值(因为赋值的地方是内存的常量区(可读不可写))
return 0;
}
5、布尔型(bool):输出不同数据类型的字符串的值和其对应的数据大小
#include <stdio.h>
#include <stdbool.h> // 会有定义的真值(true)和假值(false)
// 官方定义的(stdbool.h)
/*
#define true 1
#define false 0
*/
// 自己定义的
#define TRUE 1
#define FALSE 0
int main(int argc, char const *argv[])
{
// 一般定义
bool flag = 100; // 非0为真,0为假
// 判断方法1:
if (flag == TRUE)
{
printf("11111111111\n");
}
else
{
printf("222222222\n");
}
// 判断方法2:(笔试题)
if (flag) // 真
{
printf("3333333333333\n");
}
if(!flag) // 逻辑非,假
{
printf("4444444444444\n");
}
return 0;
}