小编jsu*_*eld的帖子

计算C中数据类型的范围

我正在研究K&R第二版,并且无法弄清楚为什么我会得到一定的结果.我正在解决的问题是计算数据类型的上限和下限.特别:

"编写一个程序来确定char,short,int和long变量的范围,包括有符号和无符号,通过从标准头文件中打印适当的值并直接计算.如果你计算它们会更难:确定各种浮动的范围 - 点类型."

我已经了解了按位运算符和两个人的称赞,并且我认为应该对签名数据类型有效,但是它适用于对我没有任何意义的无符号数据类型.这是代码:

#include <stdio.h>

main()
{
    signed int i;

    i = ~0;
    i >>= 1;
    printf("Upper limit: %d\n", i);
    printf("Lower limit: %d\n", -i -1);
}
Run Code Online (Sandbox Code Playgroud)

这将导致-1被打印为上限,0被打印为下限.但是,如果我将i更改为unsigned int,我会得到我期望的结果(2147483647和-2147483648).我无法解决这个问题,因为我的理解是unsigned int永远不会小于0,而signed int应该使用这些按位运算符,即如果它是32位系统,

~0 == 11111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)

,和

~0 >> 1 == 011111111111111111111111111111111, 
           or 2147483647.
Run Code Online (Sandbox Code Playgroud)

知道我哪里错了吗?

c

5
推荐指数
2
解决办法
5050
查看次数

标签 统计

c ×1