← 返回 C++ 学习记录

C++ JOURNAL / 数据与计算

运算、数字拆分与进制

从四位数拆分,到按位重建一个数。

按我的学习记录整理 · 示例用于帮助理解
这篇记录里

/ 和 % 分别做什么

+、-、* 分别用于加、减、乘。/ 是除法;两个整数相除得到整数,结果向零截断,例如 7 / 2 得到 3。% 是整数取余,7 % 2 得到 1。除数不能为 0。

对非负整数 n,n % 10 取出个位,n / 10 去掉个位。这里说“个位”的拆分方法以非负数为前提。

我做过的四位数拆分

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    if (n < 1000 || n > 9999) return 0;
    int a, b, c, d;
    d = n % 10;
    n = n / 10;
    c = n % 10;
    n = n / 10;
    b = n % 10;
    n = n / 10;
    a = n % 10;
    cout << a << " " << b << " " << c << " " << d << endl;
    return 0;
}

输入 1234,输出 1 2 3 4。a、b、c、d 分别是千、百、十、个位。n 在过程中不断改变;如果后面还需要原数,要先另存一份。|| 在这里表示“或者”,用于排除不属于四位正整数的输入。

二、八、十、十六进制

二进制使用 0、1;八进制使用 0 到 7;十进制使用 0 到 9;十六进制还使用 A 到 F 表示 10 到 15。

四位二进制 abcd 的十进制值是:

int value = a * 8 + b * 4 + c * 2 + d;

比如 1000 对应 8,不是把四个数字直接相加。这里每一位都应是 0 或 1。

x = x * k + a

从左到右读取 k 进制的各位时,每加入一位 a,先把已经读到的部分乘 k,再加 a。例如重建二进制 1011:

  • 开始 x = 0。
  • 读到 1:0 × 2 + 1 = 1。
  • 读到 0:1 × 2 + 0 = 2。
  • 读到 1:2 × 2 + 1 = 5。
  • 读到 1:5 × 2 + 1 = 11。

a 必须是这个进制允许的数字;数值仍不能超出存储类型的范围。

0xF、hex 和 dec

源代码中的 0xF 表示十六进制的 F,也就是十进制 15。hex、dec 控制流里的整数进制:

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
    int n = 0xF;
    cout << hex << n << " " << dec << n << endl;
    return 0;
}

输出 f 15。变量没有变成另一种数,改变的是显示方式。进制设置会保留在对应的流中,后续需要十进制时要切回 dec。

返回全部学习记录 ↗