不同标准下的C语言常量范围的默认类型的检测 (测试样例为C90与C99)

不同标准下的C语言常量范围的默认类型的检测

 

一、C90与C99标准下的不同常量范围的默认类型

 

 

  • C90标准下对不同常量范围默认类型的检测实现及运行结果:

  • C99标准下对不同范围默认类型的检测实现及运行结果:

 

 

  • 结论
  1. 在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),故最后两者的值相等。

 

  1. 在C99的标准下:

2147483648与2147483647均作为带符号数,故而-2147483648与2147483647可以按带符号数比较大小,并且后者大于前者。同理,-2147483648-1与2147483647均被当作带符号数处理,故后者大于前者。

 

 

posted @ 2022-03-25 13:19  王回甘  阅读(322)  评论(0编辑  收藏  举报