我正在研究Objective-C。今天,我遇到了一个问题:
在Mac上,short是2字节整数,一位用于保存 标志。短线可以存储的最小数量是多少?是什么 最大?
下面是我的代码,我对循环有疑问。在For循环中,x从0变大,如1,2,3,4,5 .....,但最终结果是-32768。 我无法弄清楚为什么结果是负数。与最大的问题相同。
//Resize widget on handler click
var height;
function handler1() {
height = $(this).parent().parent().attr( "data-sizey" );
// console.log(height, "Height");
gridster.resize_widget($(this).parent().parent(), 0, 1);
$(this).toggleClass('arrow_rotate');
$(this).parent().parent().toggleClass('minimized');
$(this).one("click", handler2);
}
function handler2() {
gridster.resize_widget($(this).parent().parent(), 0, height);
$(this).toggleClass('arrow_rotate');
$(this).parent().parent().toggleClass('minimized');
$(this).one("click", handler1);
}
$(".minimize").one("click", handler1);
答案 0 :(得分:3)
不幸的是,这是未定义的行为。 C规范中未定义行为的第一个示例是
未定义行为的一个示例是整数溢出的行为。 C11dr§3.4.33
两个for
循环都会产生这种未定义的行为。 智能编译器可以识别并将for (x = 0; x > -1; x++) { continue; }
更改为for (;;) {; }
,无限循环或;
(无)。
for (x = 0; x > -1; x++) {
continue;
}
for (y = 0; y < 1; y--) {
continue;
}
所以一切皆有可能。代码可以使用以下内容,但这可能不是本练习的内容。
#include <limits.h>
printf("Smallest short is %d. \n", SHRT_MIN);
printf("Largest short is %d. \n", SHRT_MAX);
答案 1 :(得分:0)
因为溢出。
带符号的2字节整数可由以下16位表示:
00000000 00000000
其中第一位是符号位(0
表示正数,1
表示负数)。递增时,最终会达到01111111 11111111
(最大正整数)并再次递增以获得1000000 000000
(最大负整数)。有关为何以这种方式格式化位,请参见2's complement。