Objective c 变量越来越大,但结果是最小的数?
我目前正在学习Objective-C。今天,我遇到了一个问题: 在Mac上,short是2字节整数,一位用于保存 签名一个空头能储存的最小数字是多少?问题是什么 最大的 下面是我的代码,我有一个关于循环的问题。在For循环中,x从0开始变大,如1,2,3,4,5…,但最终结果是-32768。 我不明白为什么结果是负数。最大的那个也有同样的问题Objective c 变量越来越大,但结果是最小的数?,objective-c,loops,for-loop,Objective C,Loops,For Loop,我目前正在学习Objective-C。今天,我遇到了一个问题: 在Mac上,short是2字节整数,一位用于保存 签名一个空头能储存的最小数字是多少?问题是什么 最大的 下面是我的代码,我有一个关于循环的问题。在For循环中,x从0开始变大,如1,2,3,4,5…,但最终结果是-32768。 我不明白为什么结果是负数。最大的那个也有同样的问题 short x; short y; for (x = 0; x > -1; x++) { continue; } printf("Smal
short x;
short y;
for (x = 0; x > -1; x++) {
continue;
}
printf("Smallest short is %d. \n",x);
for (y = 0; y < 1; y--) {
continue;
}
printf("Largest short is %d. \n",y);
short x;
短y;
对于(x=0;x>-1;x++){
继续;
}
printf(“最小短路为%d.\n”,x);
对于(y=0;y<1;y--){
继续;
}
printf(“最大短路为%d.\n”,y);
因为溢出
有符号2字节整数可由以下16位表示:
00000000000000
其中第一位是符号位(
0
表示正,1
表示负)。当您递增时,最终将达到01111111111
(最大的正整数)并再次递增以获得10000000000
(最大的负整数)。请参见为什么位以这种方式格式化。不幸的是,这是未定义的行为。C规范中未定义行为的第一个示例是
未定义行为的一个示例是整数溢出行为。C11dr§3.4.3 3
for
循环都会产生这种未定义的行为。智能编译器可以识别并将(x=0;x>-1;x++{continue;}的更改为(;;){;}
的,一个无限循环或代码>(无)
(x=0;x>-1;x++)的{
继续;
}
对于(y=0;y<1;y--){
继续;
}
所以一切皆有可能。代码可以使用以下内容,但这可能不是本练习的内容
#include <limits.h>
printf("Smallest short is %d. \n", SHRT_MIN);
printf("Largest short is %d. \n", SHRT_MAX);
#包括
printf(“最小短路为%d.\n”,SHRT_MIN);
printf(“最大短路为%d.\n”,SHRT_MAX);
#include <limits.h>
printf("Smallest short is %d. \n", SHRT_MIN);
printf("Largest short is %d. \n", SHRT_MAX);