c语言中,int 站2个字节的话,最大就是2∧15 等于32768 。为什么我看别人说是32767

c语言中,int 站2个字节的话,最大就是2∧15 等于32768 。为什么我看别人说是32767,第1张

2个字节是16位,共能表示2^16=65536个数。但由于数是有符号的,最高位用作符号位,所以只有低15位表示绝对值。再加上整型在内存中以补码存储,能表示的最大正整数是2^15-1=32767。

另外,现在的int一般为4字节。

在有符号数中,最高数据位表示符号,1表示负数,0表示正数。如果规则只是这样,那么0的表示方式就有两种1000 0000 0000 0000和0000 0000 0000 0000,

按照这种规则的话,-32767就是最小啦,但是0有两种表示方式,所以把1000 0000 0000 0000单独规定为 比-32767小1的整数,也就是-32768。

另外位数不是16的时候也一样,比如8位数可以表示的范围就是-128到127

首先,C语言里面的整数相除的结果都是去尾的, 比如3/2等于1,4/3等于1,13/5等于2,就是只保留算术运算的整数部分。

其次,结果为什么会是32767,这个就有问题了,因为按这个结果推算,-1的无符号表示结果是65535,也就是2的16次方减1,也就是说unsigned int的大小只有两个字节??这个是在什么平台上跑的??正常unsinged int大小是四个字节,也就是结果保存为无符号型也应该是2147483647,不可能是32767。

高位丢失,可能变负数。

例如:

long int i = 32799; //没问题

short int k = 32799; // 有问题

printf("%d, %d",i,k);

得:

32799, -32737

为什么会是死循环呢?

除非i是浮点类,否则无论i的类型是什么 反复的++i终会有溢出的时候呀,到时候如果i是有符号,就会小于0,符合退出循环条件;如果i是无符号,就会等于0,也符合退出条件。

#include <stdioh>

void main()

{

int result[15] = {0};//数组用来存放最终结果

int number,i;

printf("Input a number:");

scanf("%d",&number);

for(i=0;i<15;i++) //套用了手工求解2进制数的方法

{

result[i] = number%2;

if(!(number = number/2)) break;

}

for(i=14;i>=0;i--) //寻找第一个非零的数组元素

{

if(1==result[i]) break;

}

if(-1==i) i = 0; //如果输入是0,需要把i改为0,否则若果输入0就没有输出了

for(;i>=0;i--) //输出结果

{

printf("%d",result[i]);

}

printf("\n");

}

可能没上面的写得漂亮,但是应该挺好懂的。已经测试了0,6,32767等数字,结果显示正确。希望对楼主有帮助。

分析:

若我们输入的a=12345

第一次取模  b=a%10=5 取个位  a=a/10=1234

第二次取模  b=a%10=4 取十位  a=a/10=123

第三次取模  b=a%10=3 取百位  a=a/10=12

/

#include<stdioh>

main()

{

int a,b,sum=0,pingfang; //a表示我们输入的数字,b表示每一次取的位数,

                        //sum表示平方和,pingfang表示位数为奇数的数字的平方

scanf("%d",&a);     //输入一个规定范围内的整数

for(;a>0;)             //判断循环输入的a是否大于零

{

b=a%10;        //除以10取模,每次取一位

a=a/10;        //整除10

if(b%2!=0)   //判断取得余数(位数)是否奇数,若是奇数进行循环下次的语句

{

 

pingfang=bb;    //奇数取得它的平方和

sum+=pingfang;   //取各位平方和

    printf("%d为奇数,它的平方=%d\n",b,bb);

    }

}

printf("各位奇数的平方和为%d",sum);

}

扩展资料:

当一个C的源程序经过编译、链接后,会生成扩展名为EXE的可执行文件(对windows *** 作系统而言),这是可以在 *** 作系统下直接运行的文件,换句话说,就是由系统来启动运行的。由系统在启动运行时传递参数

在 *** 作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。其格式为:

命令参数1参数2参数nt;

此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数。

命令行与main()函数的参数存在如下的关系:

设命令行为:program str1 str2 str3 str4 str5

其中program为文件名,也就是一个由programc经编译、链接后生成的可执行文件programexe,其后各跟5个参数。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为charargv[6],指针数组的取值情况如图6-15所示。

数组的各指针分别指向一个字符串。应当引起注意的是接收到的指针数组的各指针是从命令行的开始接收的,首先接收到的是命令,其后才是参数。

以上就是关于c语言中,int 站2个字节的话,最大就是2∧15 等于32768 。为什么我看别人说是32767全部的内容,包括:c语言中,int 站2个字节的话,最大就是2∧15 等于32768 。为什么我看别人说是32767、C语言里,整型范围(按两个字节算),是-32768到32767,如何计算来的、c语言中int x=1,unsigned int y=2,(x-y)/2结果为什么是32767而等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10109714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存