易截截图软件、单文件、免安装、纯绿色、仅160KB

Keil C中用unsigned long要注意的问题

 Keil C里用到了unsigned long长整型变量,编译时都能通过,但运行时老是溢出,同伙百度到了此贴,解决了问题,于是转帖于此:
今天调试一个乘法,出了点问题,先看代码示意:
void test(void)
{
       unsigned long mid1,mid2,mid3;
       mid1=6*10000;//index1
       mid2=7*10000;//index2
        mid="8"*10000;//index3
}
咋一看,这段代码似乎是对的,其实不然,如果跟踪调试一下代码就会发现:
mid1=0xea60=60000;
mid2=0x1170=4464;
mid3=0x3880=14464;
mid1是正确的,mid2和mid3是错误的!
产生错误的原因是:
编译器在编译的时候把6*10000、7*10000以及8*10000计算得来的结果存在了一个unsigned int类型的变量当中,unsigned int类型变量的最大值是0xffff,即65536,因此在 index2与index3行中发生了数据溢出,导致计算错误!
解决方法:
void test(void)
{
       unsigned long mid1,mid2,mid3;
       mid1=6*(unsigned long)10000;//index1
       mid2=7*(unsigned long)10000;//index2
        mid="8"*(unsigned long)10000;//index3
}
请注意,以下代码是错误的!至于错误原因,大家自己分析吧。
void test(void)
{
       unsigned long mid1,mid2,mid3;
       mid1=(unsigned long)(6*10000);//index1
       mid2=(unsigned long)(7*10000);//index2
        mid=(unsigned long)(8*10000);//index3
}


相关文档:

C_使用switch语句

 源码:
# include <stdio.h>
 
int main()
{
    int num;
    /* 下面定义的各变量,分别代表个位,十位,百位,千位,万位,十万位以及位数 */
    int indiv, ten, hundred, thousand; 
    int ten_thousand, hundred_thous ......

C_定义字符型二维数组实现简单的编辑器

 源码:
# include <stdio.h>
/* 宏定义 */
# define MAX 100
# define LEN 80
 
/* 一个非常简单的文本编辑器 */
int main()
{
    char text[MAX][LEN];  // 定义字符型数组
    register int t, i, j;    /* 定义三个寄存器变量 */
  ......

C_综合使用数组实现简单的学生成绩管理系统

 源码:
/* 学生成绩查询系统 */
# include <stdio.h>
# include <stdlib.h>
 
int main( )
{
    int select;
    int i, j;
    int score[5][7];
    int average = 0;
    int sum = 0;
  &n ......

C Sharp(C#)中如何删除文件(文件夹)

C Sharp(C#)中如何删除文件(文件夹)
直接删除:
using System.IO;
...
string filePath = @"D:\...\xxx.xxx";

if (File.Exists(filePath))
{
File.Delete(filePath);
}
else
{
Console. ......

virtualBox 大搬家 从C盘移走

 即使将VirtualBox安装到别的盘上,其做成的虚拟机(系统,硬盘)仍会默认生成到系统盘,默认C:盘上,随着虚机数量和内容增加挤占了本来就不大的系统盘空间,很是不便。
 开始将C:盘下.VirtualBox目录下的东西全盘拷贝至别处,然后在VirtualBox的文件/环境设置 中将『默认硬盘目录』和『默认假想机器』做相应的修 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号