简单的数据问题
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位; 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;
pow(2,32)使用%d输出?不是已经溢出了么?怎么可能输出正确的结果? sunrise085 发表于 2020-3-20 18:19
pow(2,32)使用%d输出?不是已经溢出了么?怎么可能输出正确的结果?
抱歉,之前打错了,我这个计算机int是4个字节,即32位,32位就可以装2的32次方,%d打印int型,作业要求是不使用头文件来达到测量int的范围,所以我想到使用sizeof这个运算符, 年少的梦想 发表于 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;
}
人造人 发表于 2020-3-20 19:47
谢谢,但我刚刚忍不住看了小甲鱼的答案,小甲鱼计算的数据范围是这样的const int max_int = pow(2, sizeof(int) * 8) / 2 - 1;
const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1);话说为什么要除2呢? 年少的梦想 发表于 2020-3-20 19:06
抱歉,之前打错了,我这个计算机int是4个字节,即32位,32位就可以装2的32次方,%d打印int型,作业要求是 ...
谁告诉你32位能装下2的32次方的?最大值是2的32次方-1 sunrise085 发表于 2020-3-20 20:04
谁告诉你32位能装下2的32次方的?最大值是2的32次方-1
尴尬,突然想到了,是因为补码吧,谢谢了 假设int占4位32字节,
最高字节用来做符号位
最高字节0代表正数,1代表负数
因此int最小值为负(2的31次方);
抛去0,最大值为2的31次方-1; 如果想知道的更具体,去看深入理解计算机系统这本书,前几页有说补码的问题 magicpower 发表于 2020-3-21 02:20
如果想知道的更具体,去看深入理解计算机系统这本书,前几页有说补码的问题
好的,谢谢了,我明白了
页:
[1]