2012-04-11 46 views
0

我需要检查变量vi_theIndex的值。在给定时刻它有65无法检查Objective-C中变量的值C

我要检查,如果vi_theIndex是大于或等于零且小于32 现在,我不喜欢这样的值:

long long vi_theIndex = 65; 
if ((vi_theIndex >= 0) && (vi_theIndex < 32)) 
{ 
    //Case true 
} 
else 
{ 
    //Case false 
} 

我意识到65的结果是错误的。第二种情况应该出现,但第一种情况是成立的。为什么是这样?

我尝试这样做:

long long vi_theIndex = 65; 

bool limitFlag1, limitFlag2; 

limitFlag1 = (vi_theIndex <= 0); 
limitFlag2 = (vi_theIndex = 65); 

limitFlag2变得真实,limitFlag1变得不确定,调试器doesn't即使停在那里我的断点。看起来C不懂'<','< ='或'>'的标志。

limitFlag1 = (vi_theIndex < 0); 

limitFlag1没有定义:当我使用“<”或“>”签署单独像这里也会发生这种情况。

请问有人可以对此有所了解吗?

+1

我认为应该是limitFlag2 =(vi_theIndex == 65); – 2012-04-11 06:03:12

+0

你为什么要用很长的时间?考虑到你的检查范围和vi_theIndex的最大值,你应该改变你存储索引的类型到一个更小的类型。也由于缓存未命中,你应该改变它,所以你当前的虚假陈述成为真正的陈述,因为对于33或66的每个实例长达MAX最长您将收到一个缓存未命中......并且这是很多缓存未命中 – CStreel 2012-04-11 06:04:59

+0

缓存小姐?你的意思是分支错误预测?无论如何,我希望编译器会照顾它。 – 2012-04-11 06:23:11

回答

2

您不能为第一个示例显示真实的代码 - 正如您所说的,应该执行“case false”。

你的第二个例子有一个问题 - 你有vi_theIndex = 65,而不是vi_theIndex == 65,这可能是你的意思。你所拥有的声明总是如此。 limitFlag1将是0 - 我不确定你的意思是“变得未定义” - 你是不是也在这里展示你真实的代码?

+0

是的,当然,vi_theIndex == ws的意思。 '变成未定义'表示通常变量在调试器中的值可见。 limitFlag1只是不显示在调试器中。 – 2012-04-11 06:12:58

+0

你有没有打开一堆优化?有些变量只能在寄存器(而不是内存)中进行优化,在调试器中效果不佳。 – 2012-04-11 06:23:46

+0

不幸的是,这个评论字段不接受我的代码。 – 2012-04-11 06:25:12