【C/C++】C/C++编程——整型(一)

简介: 【C/C++】C/C++编程——整型(一)

整型

C++ 中的整型是基本的数据类型之一,用于表示没有小数部分的数。这包括正整数、负整数以及零。C++ 提供了多种整型,以适应不同大小的数值需求和优化内存使用。

整型的种类


C++ 中的整型可以根据其大小(即占用的字节数)和能够表示的数值范围来分类。下表概述了 C++ 中常见的整型,包括它们的名称和在大多数现代编译器和系统中的典型占用空间。需要注意的是,实际的大小可能根据编译器和目标平台的架构(如 32 位或 64 位系统)而有所不同。


类型 典型大小 (字节) 取值范围(有符号) 说明
short intshort 2 -32,768 至 32,767 短整型,用于节省内存空间,适合存储较小的整数值。
int 4 -2,147,483,648 至 2,147,483,647 最常用的整型,适用于一般整数运算。

2.png

整型的输出

在 C++ 中,输出整型变量的值通常使用 std::cout 对象,它是标准输出流。std::cout 位于 <iostream> 头文件中,并且是用来向控制台(或其他标准输出设备)发送输出的。输出操作通过 << 运算符(插入运算符)完成,该运算符用于将数据从程序发送到标准输出流。

基本用法

输出整型变量的基本语法是:

std::cout << variable;

这里,variable 是你想要输出的整型变量。

示例
#include <iostream>

int main() {
    int myInt = 10;
    std::cout << "The value of myInt is: " << myInt << std::endl;
    return 0;
}


运行结果

在这个示例中,myInt 是一个整型变量,其值被初始化为 10。使用 std::cout 输出一段文本,后面跟着 myInt 的值,最后是一个换行符(通过 std::endl)。

格式化输出


C++ 还提供了一些方法来格式化输出,例如设置字段宽度、填充字符和数值基数(十进制、十六进制、八进制)。

设置字段宽度

使用 std::setw 来设置下一个输出字段的宽度。std::setw 需要 <iomanip> 头文件。

#include <iostream>
#include <iomanip>

int main() {
    int myInt = 42;
    std::cout << "The value of myInt is: "<< myInt << std::endl;
    std::cout << "The value of myInt is: " << std::setw(10) << myInt << std::endl;
    return 0;
}

在这个示例中,std::setw(10) 设置了字段宽度为 10,因此输出的数字将在一个 10 字符宽的字段中右对齐显示。


设置填充字符

使用 std::setfill 来设置填充字符,这也需要 <iomanip> 头文件。

#include <iostream> // 包含输入输出流
#include <iomanip>  // 包含格式化输出的库

int main() {
    int myInt = 42; // 定义一个整型变量并初始化

    // 使用std::cout输出myInt,设置字段宽度为10,不足部分用'*'填充
    std::cout << std::setfill('*') << std::setw(10) << myInt << std::endl;

    return 0; // 表示程序正常结束
}


如果 myInt 值为 42,这将输出"********42",因为字段宽度为 10,不足部分用 * 填充。

数值基数

使用 std::hex、std::oct 和 std::dec 可以设置十六进制、八进制和十进制输出。

#include <iostream> // 包含标准输入输出流库

int main() {
    int myInt = 42; // 定义一个整型变量并初始化

    // 使用十六进制格式输出myInt的值
    std::cout << "Hex: " << std::hex << myInt << std::endl;

    // 使用八进制格式输出myInt的值
    std::cout << "Oct: " << std::oct << myInt << std::endl;

    // 使用十进制格式输出myInt的值
    std::cout << "Dec: " << std::dec << myInt << std::endl;

    return 0; // 表示程序正常结束
}


在这个例子中使用 std::cout 和 std::hex 以十六进制格式输出 myInt 的值。输出将以"Hex: "开头,后跟 myInt 的十六进制表示。然后,使用 std::cout 和 std::oct 以八进制格式输出 myInt 的值。输出将以"Oct: "开头,后跟 myInt 的八进制表示。最后,使用 std::cout 和 std::dec 以十进制格式输出 myInt 的值。输出将以"Dec: "开头,后跟 myInt 的十进制表示。

整型的输入

在 C++ 中,整型数据的输入是通过标准输入流 std::cin 来完成的,这是一个与 std::cout 相对的输入流对象。std::cin 位于 <iostream> 头文件中,并且主要用于从标准输入设备(通常是键盘)读取数据。


基础用法

要从标准输入读取一个整型变量,基本的语法结构如下:

type variable;
std::cin >> variable;

这里的 type 是整型数据的类型(例如,int、short、long、long long 等),而 variable 是变量的名称。

示例代码
#include <iostream>

int main() {
    int number;
    std::cout << "Please enter an integer: ";
    std::cin >> number;
    std::cout << "You entered: " << number << std::endl;
    return 0;
}


在这个示例中,程序首先提示用户输入一个整数,然后使用 std::cin 从键盘读取输入,并将输入的值存储到名为 number 的变量中。最后,程序使用 std::cout 输出用户输入的值。


输入验证

在实际应用中,用户的输入可能不总是符合预期。例如,当期望输入一个整数时,用户可能输入了一个字符或字符串,这会导致 std::cin 进入错误状态,随后的输入操作将会失败。

为了处理这种情况,需要检查 std::cin 的状态,并在发现错误时采取措施。这通常涉及到两个步骤:清除错误标志和丢弃错误输入。

示例代码
#include <iostream>
#include <limits>

int main() {
    int number;
    std::cout << "Please enter an integer: ";

    while (!(std::cin >> number)) {
        std::cin.clear(); // 清除错误标志
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 丢弃错误输入直到下一个换行符
        std::cout << "Invalid input. Please enter an integer: ";
    }

    std::cout << "You entered: " << number << std::endl;
    return 0;
}


在这个改进的示例中,如果用户的输入导致 std::cin 进入错误状态,程序会使用 std::cin.clear() 来清除错误标志,然后使用 std::cin.ignore() 来丢弃错误的输入直到下一个换行符。这样,用户就有机会重新输入一个有效的整数。

注意事项


当使用 std::cin 进行输入时,如果输入流中还有其他待处理的数据(如换行符),这些数据可能会影响后续的输入操作。在某些情况下,可能需要额外的 std::cin.ignore() 调用来处理这些额外的数据。

对于超出整型变量表示范围的输入,std::cin 会导致未定义行为,这通常会导致变量存储最大或最小可能值,或者完全不可预测的值。

了解不同整型的取值范围和选择合适的整型对于防止溢出和意外行为非常重要。


目录
相关文章
|
1月前
|
存储 C++ UED
【实战指南】4步实现C++插件化编程,轻松实现功能定制与扩展
本文介绍了如何通过四步实现C++插件化编程,实现功能定制与扩展。主要内容包括引言、概述、需求分析、设计方案、详细设计、验证和总结。通过动态加载功能模块,实现软件的高度灵活性和可扩展性,支持快速定制和市场变化响应。具体步骤涉及配置文件构建、模块编译、动态库入口实现和主程序加载。验证部分展示了模块加载成功的日志和配置信息。总结中强调了插件化编程的优势及其在多个方面的应用。
251 64
|
1月前
|
安全 程序员 编译器
【实战经验】17个C++编程常见错误及其解决方案
想必不少程序员都有类似的经历:辛苦敲完项目代码,内心满是对作品品质的自信,然而当静态扫描工具登场时,却揭示出诸多隐藏的警告问题。为了让自己的编程之路更加顺畅,也为了持续精进技艺,我想借此机会汇总分享那些常被我们无意间忽视却又导致警告的编程小细节,以此作为对未来的自我警示和提升。
114 5
|
1月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
51 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
1月前
|
安全 程序员 编译器
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
81 11
|
1月前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
54 5
|
1月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
42 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
1月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
79 2
|
1月前
|
存储 编译器 C++
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
39 2
|
1月前
|
程序员 C++
C++编程:While与For循环的流程控制全解析
总结而言,`while`循环和 `for`循环各有千秋,它们在C++编程中扮演着重要的角色。选择哪一种循环结构应根据具体的应用场景、循环逻辑的复杂性以及个人的编程风格偏好来决定。理解这些循环结构的内在机制和它们之间的差异,对于编写高效、易于维护的代码至关重要。
53 1
|
1月前
|
自然语言处理 编译器 Linux
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器