IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 7月16日笔记C语言基础数据类型 -> 正文阅读

[C++知识库]7月16日笔记C语言基础数据类型

1. 整型

  • 概念:表达整数类型的数据
  • 语法:

int?a = 123; // 定义了一个专门用来存储整数的变量a

  • 需要注意的地方:
  1. int 的本意是 integer,即整数的意思
  2. int a 代表在内存中开辟一块小区域,称为 a,用来存放整数,a 一般被称为变量。
  3. 变量 a 所占内存大小,在不同的系统中是不一样的,64位系统典型的大小是4个字节。
  4. 变量 a 有固定的大小,因此也有取值范围,典型的范围是:-2147483648到2147483647
  • 整型修饰符
    • short:用来缩短整型变量的尺寸,减少取值范围并节省内存,称为短整型
    • long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长整型
    • long long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长长整型
    • unsigned:用来去除整型变量的符号位,使得整型变量只能表达非负整数

short?int?a; // 短整型

long?int?b; ?// 长整型

long?long?int?c; // 长长整型

unsigned?int?e; ?// 无符号整型

unsigned?short?int?f; // 无符号短整型

unsigned?long?int?g; ?// 无符号长整型

unsigned?long?long?int?h; // 无符号长长整型

  • 使用整型修饰符后,关键字 int 可以被省略

short?a; // 短整型

long?b; ?// 长整型

long?long?c; // 长长整型

unsigned?e; ?// 无符号整型

unsigned?short?f; // 无符号短整型

unsigned?long?g; ?// 无符号长整型

unsigned?long?long?h; // 无符号长长整型

  • 符号位:
    • 有符号的整型数据,首位为符号位,0表示正数,1表示负数。2^31-1
    • 无符号的整形数据,没有符号位。2^32-1
  • 编码形式:
    • 原码:正数直接使用二进制来表达,比如a=100,在内存中是 00…001100100
    • 补码:负数用绝对值取反加一来表达,比如a=-3,在内存中是11…1111111101
    • 注意负数的补码在取反加一的时候,符号位是不动的
  • 溢出:
    • 超过数据所能表达的范围,称为溢出,就像汽车里程表,最大值和最小值是相邻的
  • 进制:源码中可以使用八进制、十进制或十六进制,但实际数据在内存中一律是二进制
    • 十进制(默认),比如1099
    • 八进制,比如013
    • 十六进制,比如0x6FF0A
  • 格式控制符
    • int 整型:%d
    • short 整型:%hd, h代表half,即一半的存储字节
    • long 整型:%ld
    • long long 整型:%lld
    • 显示不同进制的前缀: %#o、 %#x

2. 浮点型

  • 概念:用来表达实数的数据类型
  • 分类:
    • 单精度浮点型(float),典型尺寸是4字节
    • 双精度浮点型(double),典型尺寸是8字节
    • 长双精度浮点型(long double),典型尺寸是16字节
    • 占用内存越多,能表达的精度越高

float?f1?= 3.1415926; // 单精度

Printf(%.3f\n,f1); // 3.142 ,四舍五入

double?f2; // 双精度

long?double?f3; // 长双精度

浮点类型

最小精度

最大数值

float

10^{-37}10?37

10^{38}1038

double

10^{-307}10?307

10^{308}10308

long double

10^{-4931}10?4931

10^{4932}104932

3. 字符?字符是用’’单引号描述

char?ch1 = 'a'; ?// 'a'是字符常量,代表字母a

char?ch2 = '\n'; // '\n'是不可见字符常量,代表回车

计算机中存储的都是1和0,因此各种字符都必须被映射为某个数字才能存储到计算机中,这种映射关系形成的表称为 ASCII 码表。

字符本质上就是一个单字节的整型,支持整型所有的运算。比如:

char?c1 = 20;

char?c2 = c1 + 'a'; // 等价于 char c2 = 20 + 97;

printf("%c\n", c2); // 以字符形式输出117,即 'u'

printf("%d\n", c2); // 以整型形式输出117

4. 字符串??字符串是用双引号

  • 定义

// 字符串的定义方式有两种:指针和数组

char?*s1 = "abcd"; // 使用字符指针来表示字符串

char?s2[]= "abcd"; // 使用字符数组来表示字符串

注意:所有类型(char * || int*||float *||double *)的指针在32位系统都是占用4字节,在64位系统是占用8字节

// 注意,使用数组来定义字符串时,方括号[]里面的数字可以省略

// 不省略也可以,但必须必字符串实际占用的内存字节数要大,比如:

char?s3[] = "apple";

  • 在内存中的存储
    • 在内存中实际上是多个连续字符的组合
    • 任何字符串都以一个 ‘\0’ 作为结束标记,例如:“funny story” 的内存如下

5. 布尔型数据

头文件:#include <stdbool.h>

  • 概念:布尔型数据只有真、假两种取值,非零为真,零为假。
  • 语法:

bool?a = 1; // 逻辑真,此处1可以取其他任何非零数值

bool?b = 0; // 逻辑假

  • 注意:
  1. 逻辑真除了 1 之外,其他任何非零数值都表示逻辑真,等价于 1。
  2. 使用布尔型 bool 定义变量时需要包含系统头文件 stdbool.h。
  • 布尔型数据常用语逻辑判断、循环控制等场合。

6. 常量与变量

  • 概念:不可改变的内存称为常量,可以改变的内存称为变量
  • 举例:

int?a = 100; ???// a是变量,而100是常量

float?f = 3.14; // f是变量,而3.14是常量

char?s[] = "abcd"; // s是变量,"abcd"是常量

  • 常量的类型

常量举例

说明

类型

100

整型

int

100L

长整型

long

100LL

长长整型

long long

100ULL

无符号长长整型

unsigned long long

3.14

双精度浮点型

double

3.14L

长双精度浮点型

long double

‘a’

字符型

char

“abcd”

字符指针(字符串)

char *

7. 标准输入

  • 概念:键盘是系统的标准输入设备,从键盘中输入数据被称为标准输入
  • 相关函数:

man -f scanf

man 3 scanf

scanf(); // 格式化输入函数

fgets(); // 字符串输入函数

int?a;

float?f;

scanf("%d", &a); ??// 从键盘输入一个整型,放入指定的内存地址 &a 中

scanf("%f", &f); ??// 从键盘输入一个浮点数,放入指定的内存地址 &f 中

scanf("%d%f", &a, &f); // 从键盘依次输入一个整型和一个浮点型数据,用空白符隔开

char?c;

char?s[10];

scanf("%c", &c); ?// 从键盘输入一个字符,放入指定的内存地址 &f 中

scanf("%s", s ); ?// 从键盘输入一个单词,放入指定的数组 s 中(注意不是&s)

fgets(s, 10, stdin); // 从键盘输入一行字符串,放入数组 s 中

  • 注意1:
    • scanf() 与 printf() 不同,scanf() 的格式控制串不可乱写,尤其是结尾处的 \n
    • 用户必须完全按照 scanf() 中描述的输入格式控制串来输入数据,否则将出错。
    • 示例:

// 此处输入时必须带逗号

scanf("%d,%d", &a, &b);

// 此处必须先输入a=,然后才能输入整数

scanf("a=%d", &a);

// 此处结束输入时按下的回车符将被scanf()误以为格式控制符,无法正常结束输入

scanf("%d\n", &a);

  • 注意2:
    • scanf() 的返回值,代表成功从键盘读取的数据的个数
    • 无法匹配 scanf() 指定格式的数据,将被遗留在输入缓冲区中,不会消失
    • 示例:

// scanf() 试图从键盘读取两个整数

// 返回值 n 代表成功读取的个数,比如:

// 输入100 200,则 n 将等于2

// 输入100 abc,则 n 将等于1

// 输入abc xyz,则 n 将等于0;输入abc 200,n也将等于0

int?n = scanf("%d%d", &a, &b);

// 根据 scanf() 的返回值,判断用户是否输入了正确的格式

while(n != 2)

{

????// 需要清空缓冲区并提示用户重新输入

????char?s[50];

????fgets(s, 50, stdin);

????printf("请重新输入两个整数\n");

????n = scanf("%d%d", &a, &b);

}

scanf的输入判断,判断是否输入正确,存在小毛病。

#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
	int a,b;
	int i=0;
	printf("%d\n",k);
	printf("请先输入两个整数:\n");
	int ret=scanf("%d%d",&a,&b);
	while(ret !=2)
	{
		//int i=1;
		i++;
		char buf[50];
		fgets(buf,50,stdin);
		printf("buf=%s\n",buf);
		printf("i=%d\n",i);
		printf("请重新输入两个整数:\n");
		ret=scanf("%d%d",&a,&b);
		//int i=1;
		//i++;
		if(i>=5)
		{
			ret=2;
			printf("重复输入5次,输入失败!");
		}
	}
	printf("ret=%d\n",ret);
	printf("a=%d,b=%d\n",a,b);
    
    
    return 0;
    
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:43:20  更:2021-07-17 11:45:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 5:57:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码