不同标准下的C语言常量范围的默认类型的检测 (测试样例为C90与C99)
不同标准下的C语言常量范围的默认类型的检测
一、C90与C99标准下的不同常量范围的默认类型
- C90标准下对不同常量范围默认类型的检测实现及运行结果:
- C99标准下对不同范围默认类型的检测实现及运行结果:
- 结论
- 在C90的标准下:
2147483648被计算机认为带符号数,而2147483647则作为无符号数与之进行运算。
根据计算机中C语言的规则,如果去运算中既有无符号的数又有有符号的整数,将两个数据均当作无符号数处理。
2147483648无符号表示为100。。。0(31个0), 而2147483647无符号表示为011。。。1(31个1),根据比较得出前者大,故输出结果为false。
-2147483648先处理其数据表示一个无符号数表示为100。。。0(31个0)减去1后即为011。。。1(31个1)而后者2147483647在C90标准下作为带符号数当作无符号数处理其表示仍为011。。。1(31个1),故最后两者的值相等。
- 在C99的标准下:
2147483648与2147483647均作为带符号数,故而-2147483648与2147483647可以按带符号数比较大小,并且后者大于前者。同理,-2147483648-1与2147483647均被当作带符号数处理,故后者大于前者。
本文来自博客园,作者:王回甘,转载请注明原文链接:https://www.cnblogs.com/WScoconut/p/16054214.html