关闭

ANSI C标准之值保留(value preserving)原则

66人阅读 评论(0) 收藏 举报
分类:

当把整形操作数混合使用时,结果可能是有符号数,也肯能是无符号数,取决于操作数的类型相对大小。---------《c专家编程》第一章

eg.

#define ARRAY_LENGTH(a) (sizeof(a)/sizeof(a[0]))
int main(int argc, const char * argv[])
{
    int a[5] = {1,2,3,4,5};
    int len = -1;
    
    if(len<ARRAY_LENGTH(a))cout<<"TRUE"<<endl;
    else cout<<"FALSE"<<endl;
    
    return 0;
}

程序运行结果“FALSE”,原因是sizeof()返回的为unsigned型,所以在if判断中,len被提升到unsigned型,-1的二进制形式FFFFFFFF,作为无符号型,表示32位最大的正整数,十进制43亿多,因此数组的长度,小于len返回false.




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10375次
    • 积分:1060
    • 等级:
    • 排名:千里之外
    • 原创:85篇
    • 转载:45篇
    • 译文:0篇
    • 评论:0条
    文章分类