主页 > 创业  > 

C获取特定位数的值

C获取特定位数的值
1-1 逐位提取数字

获取对应位数的数字,适应开发过程中的各种操作,具体的代码演示案例如下所示


假设 val 是一个 5位整数(范围:0~99999),代码将逐位提取其数字,并存储到数组 g_Tempbuf 中:

g_Tempbuf[0] = val / 10000; // 提取万位(第5位) g_Tempbuf[1] = (val % 10000) / 1000; // 提取千位(第4位) g_Tempbuf[2] = (val % 1000) / 100; // 提取百位(第3位) g_Tempbuf[3] = (val % 100) / 10; // 提取十位(第2位) g_Tempbuf[4] = val % 10; // 提取个位(第1位)
1-2 实际分析

以 val = 12345 为例:万位

g_Tempbuf[0] = 12345 / 10000 = 1 // 整数除法,得到万位数字 1

千位(第4位):

val % 10000 = 12345 % 10000 = 2345 // 取余后保留后4位 2345 / 1000 = 2 // 整数除法,得到千位数字 2

百位(第3位):

val % 1000 = 12345 % 1000 = 345 // 取余后保留后3位 345 / 100 = 3 // 整数除法,得到百位数字 3

十位(第2位):

val % 100 = 12345 % 100 = 45 // 取余后保留后2位 45 / 10 = 4 // 整数除法,得到十位数字 4

个位(第1位):

val % 10 = 12345 % 10 = 5 // 直接取余,得到个位数字 5

最终,g_Tempbuf 的内容为:[1, 2, 3, 4, 5]。


1-3 数组索引与位数

g_Tempbuf[0] → 万位(最高位)

g_Tempbuf[2] → 百位

g_Tempbuf[3] → 十位

g_Tempbuf[4] → 个位(最低位)


适用的范围是:


5位整数:如果 val 不足5位(例如 val = 123),高位将补零。

例如:

val = 123 → g_Tempbuf = [0, 0, 1, 2, 3]

超过5位:如果 val 超过5位(例如 val = 123456),代码将截断高位。

例如:

val = 123456 → g_Tempbuf[0] = 12(实际是错误结果)


潜在问题:


前导零:不足5位时高位自动补零,需根据需求决定是否保留。

数值溢出:若 val 超过5位(如 val ≥ 100000),高位计算结果可能不符合预期。


1-4 程序改进

使用循环或对数运算动态确定位数,避免硬编码除法:

for (int i = 0; i < 5; i++) { g_Tempbuf[i] = val / (int)pow(10, 4 - i) % 10; }

添加范围检查:

if (val > 99999) { // 错误处理:数值超出范围 }

若需要忽略高位零,可记录有效位起始位置:

int start = 0; while (start < 5 && g_Tempbuf[start] == 0) { start++; } // 从 start 开始为有效数字

功能:


功能:将最多5位的整数按万位→个位顺序分解到数组中。

适用场景:固定位数显示(如数码管、LCD显示数值)。

注意事项:需确保输入值在合理范围内,并根据需求处理前导零和溢出问题。

......

标签:

C获取特定位数的值由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C获取特定位数的值