返回题库高级 .NET 刷题C# 选择题 · 第 2 / 50 篇

C# 试题 02:数值类型与转换

0021 以下代码输出什么?

难度: 实战

int big = 16_777_217;
float f = big;

Console.WriteLine(f == big);
  • A. Truefloat 能无损表示所有 int
  • B. Falsefloat 尾数只有 24 位有效二进制位,16_777_217 被舍入
  • C. 编译失败,int 不能隐式转换为 float
  • D. 运行抛 OverflowException
查看答案与解析

正确答案B

解析: intfloat 是隐式转换,但 float 尾数只有 24 位;16_777_217(2²⁴+1)无法精确表示,舍入为 16_777_216,比较为 False

关键点: 隐式转换不一定无损,整数转浮点会丢精度。

0022 在默认(unchecked)上下文,以下代码输出什么?

难度: 实战

long l = 3_000_000_000L;
int i = (int)l;

Console.WriteLine(i);
  • A. 编译失败,long 不能转换为 int
  • B. 运行抛 OverflowException
  • C. 输出 3000000000
  • D. 输出 -1294967296,高位被截断后按补码解释
查看答案与解析

正确答案D

解析: unchecked 下显式窄化直接截断高位:3_000_000_000 的低 32 位 0xB2D05E00 按有符号 int 解释为 -1_294_967_296

关键点: 显式转换不保证值落在目标范围内。

0023 以下代码运行结果是什么?

难度: 进阶

int x = int.MaxValue;

checked
{
    x++;
}

Console.WriteLine(x);
  • A. 运行抛 OverflowException
  • B. 输出 -2147483648
  • C. 编译失败
  • D. 输出 2147483647
查看答案与解析

正确答案A

解析: checked 块中的整数运算溢出时抛 OverflowExceptionint.MaxValue + 1 必然溢出。

关键点: checked 把静默回绕变成异常。

0024 项目未开启全局 checked,以下代码输出什么?

难度: 进阶

int x = int.MaxValue;
x++;

Console.WriteLine(x);
  • A. 运行抛 OverflowException
  • B. 输出 -2147483648,默认 unchecked 语义下静默回绕
  • C. 编译失败
  • D. 输出 2147483647
查看答案与解析

正确答案B

解析: 默认算术上下文是 unchecked,运行时溢出直接回绕:int.MaxValue + 1 变成 int.MinValue

关键点: 与上一题对比,是否有 checked 决定行为。

0025 以下代码输出什么?

难度: 进阶

Console.WriteLine(-7 / 2);
Console.WriteLine(-7 % 2);
  • A. -3-1,整数除法向零截断,余数符号与被除数一致
  • B. -4-1
  • C. -31
  • D. -41
查看答案与解析

正确答案A

解析: C# 整数除法向零截断:-7 / 2 = -3(不是向下取整的 -4);% 结果的符号与被除数一致,-7 % 2 = -1。这与 Python 等向下取整的语言不同。

关键点: 跨语言迁移时最容易踩的坑之一。

0026 关于 doubledecimal 的除零行为,哪项正确?

难度: 进阶

  • A. 两者都会抛 DivideByZeroException
  • B. double 除零得到 Infinity/NaNdecimal 除零抛 DivideByZeroException
  • C. 两者都得到 Infinity
  • D. decimal 除零得到 0
查看答案与解析

正确答案B

解析: double 遵循 IEEE 754:正数除零得 +Infinity0.0/0.0NaNdecimal 没有 Infinity/NaN 概念,除零抛异常。

关键点: 浮点与十进制的异常语义不同。

0027 以下代码输出什么?

难度: 实战

Console.WriteLine(int.TryParse(null, out int n) + " " + n);
Console.WriteLine(int.TryParse("", out int m) + " " + m);
  • A. 两行都输出 False 0TryParsenull 和空串不抛异常
  • B. 第一行抛 ArgumentNullException
  • C. 两行都输出 True 0
  • D. 第二行抛 FormatException
查看答案与解析

正确答案A

解析: TryParse 的输入参数是可空引用类型,null 与空串都按解析失败处理:返回 falseout 值置为 0,不抛异常。

关键点: TryParse 对边界输入是“全失败不抛异常”语义。

0028 以下代码运行结果是什么?

难度: 进阶

int n = int.Parse("2147483648");

Console.WriteLine(n);
  • A. 运行抛 FormatException
  • B. 返回 2147483648
  • C. 运行抛 OverflowException,数字格式合法但超出 int 范围
  • D. 返回 0
查看答案与解析

正确答案C

解析: 输入是合法数字格式,但 2_147_483_648int.MaxValue 大 1,触发 OverflowException;格式错误才抛 FormatException

关键点: 区分 FormatExceptionOverflowException 是常见考点。

0029 以下代码输出什么?

难度: 实战

int a = 100_000;
int b = a * a / a;

Console.WriteLine(b);
  • A. 100000
  • B. 编译失败
  • C. 运行抛 OverflowException
  • D. 14100a * a 中间结果溢出回绕后再做除法
查看答案与解析

正确答案D

解析: 默认 unchecked 下 100_000 * 100_000 = 10^10 溢出,截断为 1_410_065_408,再除以 100_00014100;每一步都是 int 运算。

关键点: 中间结果溢出比最终结果溢出更隐蔽,必要时提升为 long

0030 以下代码输出什么?

难度: 进阶

double a = 0.1;
double b = 0.2;

Console.WriteLine(a + b == 0.3);
  • A. True
  • B. 编译失败
  • C. False0.1 + 0.2 实际是 0.30000000000000004
  • D. 运行抛异常
查看答案与解析

正确答案C

解析: 0.10.20.3 都无法用二进制浮点精确表示,0.1 + 0.20.30000000000000004,与 0.3 不相等。

关键点: 精确十进制场景用 decimal

0031 把上一题换成 decimal,以下代码输出什么?

难度: 进阶

decimal a = 0.1m;
decimal b = 0.2m;

Console.WriteLine(a + b == 0.3m);
  • A. Truedecimal 精确表示十进制小数
  • B. False
  • C. 编译失败
  • D. 运行抛异常
查看答案与解析

正确答案A

解析: decimal 以十进制存储(28~29 位有效数字),0.1m + 0.2m 精确等于 0.3m

关键点: decimal 精度语义符合十进制直觉,但范围小于 double

0032 财务金额计算应优先选择哪种类型?

难度: 实战

  • A. double,运算性能最好
  • B. float,内存占用最小
  • C. decimal,十进制语义可避免二进制舍入误差
  • D. 任意类型结果都相同
查看答案与解析

正确答案C

解析: 金额需要精确的十进制表示,decimal 是标准选择;double/float 适合科学计算等对十进制精确性要求不高的场景。

关键点: 选型依据是“精确十进制”还是“范围/性能”。

0033 以下代码运行结果是什么?

难度: 实战

decimal third = 1m / 3m;

Console.WriteLine(third);
  • A. 运行抛 DivideByZeroException
  • B. 输出 0.3333333333333333333333333333,按 decimal 精度舍入,不抛异常
  • C. 输出 0.33
  • D. 编译失败
查看答案与解析

正确答案B

解析: decimal 除法按 28~29 位有效数字舍入到最近的十进制表示,不会抛异常(除零除外)。

关键点: decimal 除法有确定舍入规则,精确分数仍需自定舍入策略。

0034 以下代码输出什么?

难度: 进阶

char c = 'A';

Console.WriteLine(c + 1);
Console.WriteLine((char)(c + 1));
  • A. 66Bchar 参与算术时提升为 int
  • B. 65B
  • C. 'A'B
  • D. 编译失败
查看答案与解析

正确答案A

解析: char + intchar 提升为 int'A' + 1 是数值 66;显式转回 char 才得到字符 'B'

关键点: char 的算术结果是 int 而不是 char

0035 关于 int.Parse("123")(int)"123",哪项正确?

难度: 进阶

  • A. 两者等价
  • B. Parse 解析字符串内容;强制转换要求类型之间存在转换关系,stringint 不适用,(int)"123" 无法编译
  • C. 强制转换总是成功且更高效
  • D. 两者都会抛 OverflowException
查看答案与解析

正确答案B

解析: 强制转换处理继承或数值窄化;字符串到数值必须通过 ParseTryParseConvert

关键点: “(int)” 不等于“解析字符串”。

0036 以下代码输出什么?

难度: 实战

byte b = 200;
byte c = (byte)(b + b);

Console.WriteLine(c);
  • A. 400
  • B. 编译失败
  • C. 144400 截断到 byte 只保留低 8 位
  • D. 运行抛 OverflowException
查看答案与解析

正确答案C

解析: b + b 提升为 int(400),显式转回 byte 时按 unchecked 语义截断:400 mod 256 = 144

关键点: 窄化转换取低位,数值会“回绕”。

0037 以下代码输出什么?

难度: 进阶

double d = 0.1;
float f = (float)d;

Console.WriteLine(f == d);
  • A. True
  • B. Falsefloat 精度低于 double,两者二进制表示不同
  • C. 编译失败
  • D. 运行抛异常
查看答案与解析

正确答案B

解析: 0.1doublefloat 中的舍入值不同;比较时 f 提升回 double,但数值已经不是原来的 0.1d,结果为 False

关键点: 跨精度直接判等不可靠。

0038 在 unchecked 上下文,以下代码输出什么?

难度: 实战

unchecked
{
    int x = int.MaxValue + 1;
    Console.WriteLine(x);
}
  • A. 输出 -2147483648
  • B. 运行抛 OverflowException
  • C. 编译失败,常量表达式溢出
  • D. 输出 0
查看答案与解析

正确答案A

解析: 常量表达式默认按 checked 语义检查,但 unchecked 上下文允许溢出回绕,int.MaxValue + 1 得到 int.MinValue

关键点: 与 0023/0024 的运行时溢出对比,这里控制的是编译期常量。

0039 以下各字面量的类型,哪项说法正确?

难度: 进阶

var a = 1_000;
var b = 0x10;
var c = 3_000_000_000;
var d = 1e3;
var e = 1.5m;
  • A. clongddouble
  • B. cuintddoubleedecimal
  • C. blong
  • D. edouble
查看答案与解析

正确答案B

解析: 无后缀整数按 int → uint → long → ulong 顺序取第一个能容纳的类型:3_000_000_000int 范围但小于 uint 上限,所以是 uint1e3 是指数形式,为 double

关键点: “超 int 就是 long”是常见误解,实际先落到 uint

0040 以下代码运行结果是什么?

难度: 实战

Console.WriteLine(int.Parse("4 2"));
Console.WriteLine(int.Parse(" 42 "));
  • A. 两行都输出 42
  • B. 第一行抛 FormatException,第二行输出 42;默认 NumberStyles.Integer 允许首尾空白但不允许内部空格
  • C. 两行都抛 FormatException
  • D. 第一行输出 4,第二行输出 42
查看答案与解析

正确答案B

解析: int.Parse 默认使用 NumberStyles.Integer,允许前导/尾随空白和符号,但内部空格不是合法数字格式,抛 FormatException

关键点: 用户输入应先用 TryParse 或指定明确的 NumberStylesCultureInfo

官方资料

当前分类

C# 选择题

查看全部分类 →
  1. 01C# 试题 01:变量、常量与类型推断20 题
  2. 02C# 试题 02:数值类型与转换20 题
  3. 03C# 试题 03:可空类型与空值分析20 题
  4. 04C# 试题 04:运算符与表达式20 题
  5. 05C# 试题 05:流程控制20 题
ESC

输入关键词开始搜索