鱼C论坛

 找回密码
 立即注册
查看: 1143|回复: 10

[已解决]简单的数据问题

[复制链接]
发表于 2020-3-20 17:47:24 | 显示全部楼层 |阅读模式
20鱼币
        Type = sizeof(int);
        i = Type * 8;
        j = pow(2,32);
        printf("%d\n",j);

//不知道为什么问题求助的代码块用不了,所以将就看一下吧
问题是这样的,pow(2,32)的值为2147483647,而pow(2,i)的值为-2147483648,调试过了,i 的值为32,int的字节为4位;
最佳答案
2020-3-20 17:47:25
int  是有符号的
范围是从 -2^31 到2^31-1
因此要除以2
min_int = pow(2, sizeof(int) * 8) / 2 * (-1);
max_int = pow(2, sizeof(int) * 8) / 2 - 1;

如果你定义的的无符号整型 unsigned int
范围就从0到2^32-1
min_int =0;
max_int = pow(2, sizeof(int) * 8)  - 1;

最佳答案

查看完整内容

int 是有符号的 范围是从 -2^31 到2^31-1 因此要除以2 min_int = pow(2, sizeof(int) * 8) / 2 * (-1); max_int = pow(2, sizeof(int) * 8) / 2 - 1; 如果你定义的的无符号整型 unsigned int 范围就从0到2^32-1 min_int =0; max_int = pow(2, sizeof(int) * 8) - 1;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-20 17:47:25 | 显示全部楼层    本楼为最佳答案   
int  是有符号的
范围是从 -2^31 到2^31-1
因此要除以2
min_int = pow(2, sizeof(int) * 8) / 2 * (-1);
max_int = pow(2, sizeof(int) * 8) / 2 - 1;

如果你定义的的无符号整型 unsigned int
范围就从0到2^32-1
min_int =0;
max_int = pow(2, sizeof(int) * 8)  - 1;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-20 18:19:42 | 显示全部楼层
pow(2,32)使用%d输出?不是已经溢出了么?怎么可能输出正确的结果?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-20 19:06:46 | 显示全部楼层
sunrise085 发表于 2020-3-20 18:19
pow(2,32)使用%d输出?不是已经溢出了么?怎么可能输出正确的结果?

抱歉,之前打错了,我这个计算机int是4个字节,即32位,32位就可以装2的32次方,%d打印int型,作业要求是不使用头文件来达到测量int的范围,所以我想到使用sizeof这个运算符,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-20 19:47:38 | 显示全部楼层
年少的梦想 发表于 2020-3-20 19:06
抱歉,之前打错了,我这个计算机int是4个字节,即32位,32位就可以装2的32次方,%d打印int型,作业要求是 ...
#include <stdio.h>
#include <math.h>

int main(void)
{
        printf("%ld\n", (long)pow(2, sizeof(int) * 8));
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-20 20:03:48 | 显示全部楼层

谢谢,但我刚刚忍不住看了小甲鱼的答案,小甲鱼计算的数据范围是这样的
const int max_int = pow(2, sizeof(int) * 8) / 2 - 1;
        const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1);
话说为什么要除2呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-20 20:04:19 | 显示全部楼层
年少的梦想 发表于 2020-3-20 19:06
抱歉,之前打错了,我这个计算机int是4个字节,即32位,32位就可以装2的32次方,%d打印int型,作业要求是 ...

谁告诉你32位能装下2的32次方的?最大值是2的32次方-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-20 20:06:43 | 显示全部楼层
sunrise085 发表于 2020-3-20 20:04
谁告诉你32位能装下2的32次方的?最大值是2的32次方-1

尴尬,突然想到了,是因为补码吧,谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-20 23:56:05 | 显示全部楼层
假设int占4位32字节,
最高字节用来做符号位
最高字节0代表正数,1代表负数
因此int最小值为负(2的31次方);
抛去0,最大值为2的31次方-1;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 02:20:28 From FishC Mobile | 显示全部楼层
如果想知道的更具体,去看深入理解计算机系统这本书,前几页有说补码的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 09:52:53 | 显示全部楼层
magicpower 发表于 2020-3-21 02:20
如果想知道的更具体,去看深入理解计算机系统这本书,前几页有说补码的问题

好的,谢谢了,我明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 21:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表