关于C语言中的无符号数和有符号数

发布时间:2011-09-16 共3页

  看下面的一段程序:

  1 float sum(float a[], unsigned int len)

  2 {

  3     int i;

  4     float r = 0.0;

  5     for (i = 0; i <= len - 1; ++i)

  6     {

  7         r += a[i];

  8     }

  9     return r;

  10 }

  如果len为0,那么这段代码将不会返回0.0。而是段错误。

  另外,当在无符号数和有符号数之间进行类型转换时,不同的转换顺序会得到不同的结果。如:

  1

  2 unsigned x = 0xFFFF;

  3 (int) ((word << 24) >> 24);

  4 ((int) word << 24) >> 24;

  第一个表达式的结果是0xFF,而第二个是0xFFFFFFFF.原因是第一个表达式的右移运算高位补0,而第二个右移运算高位补1.

  测试代码:

  1 #include <stdlib.h>

  2 #include <stdio.h>

  3 float sum(float a[], unsigned int len)

  4 {

  5     int i;

  6     float r = 0.0;

  7     for(i = 0; i <= len - 1; ++i)

  8     {

  9         r += a[i];

  10     }

  11

百分百考试网 考试宝典

立即免费试用