八进制与十六进制转换
八进制与十六进制转换
掌握数据的进制转换:八进制、十六进制。
八进制每一位对应 3 个二进制位(权 (8=2^3)),十六进制每一位对应 4 个二进制位(权 (16=2^4))。因此互转最快的路径往往是:先换成二进制,再按 3 位或 4 位分组;或先换成十进制再换目标进制。十六进制数位用 0–9 与 A–F(值为 10–15),大小写等价。C++ 字面量里 014 是八进制 12,0x1C 是十六进制 28;printf 可用 %o、%x 输出。
三级常考三种形态:直接互化(如把 3C 十六进制写成八进制)、混合运算(先统一到十进制再算)、以及判断前缀含义。编程题可能要求按指定进制输出,或识别输入串属于哪一种进制。认证标准规定考试时长为 120 分钟,分组时从小数点向两侧(整数从右侧)对齐,左侧不足补 0。
int n = 60;
cout << oct << n << '\n'; // 74
cout << hex << n << '\n'; // 3c
cout << dec << 0x3C << '\n'; // 60
不要把 14 八进制当成十进制十四;字母 A–F 必须按 10–15 换算,不能当普通字符跳过。
已知大写字符 'A' 的 ASCII 编码的十六进制表示为 0x41,则字符 'F' 的 ASCII 编码的十六进制表示为( )。
在 C++语言中,表达式 (0xf == 015) 的值为 true。
已知大写字符 'A' 的 ASCII 编码的十六进制表示为 0x41,则字符 'L' 的 ASCII 编码的十六进制表示为( )。
在 C++ 语言中,表达式 (0xff == 255) 的值为 true。
进制判断
C++时间 1 s内存 128 MB标准输入输出
N 进制数指的是逢 N 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五)。
现在有 N 个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如,15A6F 就只可能是十六进制,而 1011 则是四种进制皆有可能。
输入格式
输入的第一行为一个十进制表示的整数 N。接下来 N 行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,可能以 0 开头。保证不会出现空行。
保证 1≤N≤1000,保证所有字符串长度不超过 10。
输出格式
输出 N 行,每行 4 个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 1 表示可能,使用 0 表示不可能。
例如,对于只可能是十六进制数的 15A6F,就需要输出 0 0 0 1;而对于四者皆有可能的 1011,则需要输出 1 1 1 1。
样例
2 15A6F 1011
0 0 0 1 1 1 1 1
4 1234567 12345678 FF GG
0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB
判题结果
在下列编码中,不能够和二进制"1101 1101"相等的是()。
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写措辞改写选项 1
原卷作
(221)10进制,常规写法应为$(221)_{10}$ 进制洛谷有题把原卷「(221)10进制」改写成下标 $ (221)_{10} $ 进制;已按官方 PDF 第 1 页恢复四选项。
已按官方原件恢复:现为原卷原文
C++ 的字符变量的码值是整数,下面字面量形式的字符码值最大的是( )。
在C++语言中,(010<<1) 执行结果是 100。( )
下列代码将十进制转化成八进制,则横线上应填入( )。
#include <iostream>
using namespace std;
void decimal2octal(int decimal) {
int oct_number[100];
int i = 0;
while (decimal > 0) {
__________________________ //在此处填入代码
}
for (int j = i - 1; j >= 0; j--) {
cout << oct_number[j];
}
cout << endl;
}
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
using namespace std;洛谷把 using namespace 与 std 之间的双空格压成单空格,填空行下划线长度与注释空格也与原卷不符;已按 PDF 第 2 页列位恢复。
已按官方原件恢复:现为原卷原文
执行下面 C++ 代码后,输出的结果是 8。
int a = 0b1010;
int b = 01100;
int c = a & b;
cout << c <<endl;
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
cout << c <<endl;洛谷在 <<endl 前多了一个空格;已按 PDF 第 7 页列位恢复。
已按官方原件恢复:现为原卷原文
8 进制数 3703 转换成 16 进制数是( )
16 进制数 AB,表示成 2 进制数是 10101011。( )
def(十六进制)=103231(五进制)。( )
16 进制数 B2025 转换成 8 进制数是( )
CCF(十六进制) = 12363(七进制)
下列程序的作用是( )
int main() {
int decimal = 25;
cout << oct << decimal;
return 0;
}
下面程序目的是将十进制数 255 转换为十六进制输出,横线处应填写的语句是( )
#include <iostream>
using namespace std;
int main() {
int decimal = 255;
_______________________
return 0;
}
两个 13 进制的数 A 和 B,在 10 进制下分别表示 10 和 11。$ (A + B){13} = (18){13} $,也就是说 13 进制数 A 加上 13 进制数 B,和是 13 进制数 18。
$ k $ 进制,逢 $ k $ 进第二位,$ k^2 $ 进百位,$ k^3 $ 进千位。
$ \text{CCF}(十九进制)= 21\text{AC}$(十三进制)(不区分大小写)
八进制数 35.6 对应的十进制数是( )
已知大写字母 A 的 ASCII 编码的十六进制表示为 0x41 ,计算字符 m 的 ASCII 编码的八进制表示为 155 (八进制)。
在 C++ 语言中,表达式 ((0xf0 + 0x15) == 255) 的值为 true 。
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写数值印错题干
原卷作
((0xf0 + 0x15) == 255),常规写法应为((0xf0 + 0x15) == 255)洛谷有题把原卷十六进制字面写成 0xff0;官方 PDF 第 6 页图像与文本层均为 0xf0。已按原件恢复。C++ 客观题其余题干仍以洛谷为准。
已按官方原件恢复:现为原卷原文
低 4 位、高 4 位压缩技术,适用于数据仅使用字节的一部分(如仅用低 4 位)的场景。字节结构:一个字节为 8 位,分为高 4 位(高位)和低 4 位(低位)。当数据是十六进制数(0∼15,即 0x0 到 0xF),每个值仅需 4 位表示,高 4 位全为 0。将两个相邻的 4 位值合并为一个字节。四个数据 0x1、0x2、0x3、0x4 采用上述压缩技术压缩以后是( )。
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写数值印错题干
原卷作
$0\sim 15$,常规写法应为$0$ 到 $15$洛谷/初稿把公式范围写成「0 到 15」;官方 PDF 第 1 页为 $0\sim 15$,已按 600 dpi 宽裁恢复。
已按官方原件恢复:现为原卷原文
现在有一个数,请你分别判断它们是否可能是二进制、八进制、十进制、十六进制。例如,6AFF 就只可能是十六进制,而 1011 则是四种进制皆有可能。输入 N(保证 1≤N≤1000),表示有 N 个数让你进行判断,接下来输入 N 个字符串(保证所有字符串长度不超过 10),判断可能是四个进制当中的哪个进制数。输出 N 行,每行 4 个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 1 表示可能,使用 0 表示不可能。下面程序横线处可以满足这个要求的是( )。
#include <iostream>
using namespace std;
int main() {
int n = 0;
cin >> n;
for (int i = 0; i < n; i++) {
char str[11];
cin >> str;
char max = '0';
for (int i = 0; str[i] != '\0'; i++)
if (str[i] > max)
max = str[i];
___________________________________________
}
return 0;
}
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写数值印错题干
原卷作
$1 \le N \le 1000$,常规写法应为$1 \le N \le 10-0$洛谷有题 OCR 把 1000 写成 10-0;官方 PDF 第 4 页为 $1 \le N \le 1000$,已按页面图像恢复。
已按官方原件恢复:现为原卷原文
十六进制数 CCF 对应的二进制数、八进制数、十进制数分别是:110011001111、6317、3269。