我一直在编程Objective-C只有几个星期。从1987年开始,我在编程语言(如基本,Visual Basic,C++和PHP)方面的经验更加广泛,并且一直延续到今天。尽管在过去的5年中,我专门编写了PHP代码。整数精度和转换错误
今天,我发现自己被Objective-C语言中认为是位转换错误的困惑所困扰。我第一次注意到这一点时,试图分裂一个整数(84)由浮动(10.0)转换为浮动。这产生了8.399999,而不是我希望的8.400。我为这个问题编写了一个方法并继续前进。
今天,我从NSMutableDictionary中提取(int)0。我首先将它存储在一个NSInteger中,然后将其存储在一个int变量中。对于这两种情况,这些值都应为0,但对于这两种情况,我都会得到整数值151229568.(请参见截图)
我记得从我的早期编程年代起,我们不得不担心容器的大小,因为指向用32位指针访问一个4位值的存储器会导致捕获所有与其他值相关的数据,从而导致被捕获的数字出现错误。随着隐式内存管理和类型转换成为常态,多年来我不必担心这种问题,现在我再次遇到这种问题,我需要对熟悉该主题的程序员给出建议和澄清在今天的编程环境中。
问题:
- 这是不正确的指针大小或者其他什么东西的情况?
- 在后端发生了什么以产生从0到另一个数字的转换?
- 我能做些什么来从我的Objective-C计算和变量赋值中获得更好的精度和准确性?
代码:
NSInteger hsibs = [keyData objectForKey:@"half_sibs"];
int hsibsi = [keyData objectForKey:@"half_sibs"];
//breakpoint and screen capture of variables in stack
您不能直接在字典中存储'NSInteger'或'int'。你需要把它们包装在一个'NSNumber'中。 – rmaddy 2014-09-12 16:41:32