Objective c 在目标C中,“隐式转换丢失整数精度:”time_t“是什么意思?我该如何修复它?

Objective c 在目标C中,“隐式转换丢失整数精度:”time_t“是什么意思?我该如何修复它?,objective-c,Objective C,我在做一个课本上的练习,而这本书已经过时了,所以我在思考如何将它融入新的体系。我得到了准确的文本,它正在返回 '隐式转换丢失整数精度:'time_t'也称为'long'到'unsigned int' 这本书是Aaron Hillegass为Mac OS X编写的Cocoa编程,第三版,代码是: #import "Foo.h" @implementation Foo -(IBAction)generate:(id)sender { // Generate a number betwee

我在做一个课本上的练习,而这本书已经过时了,所以我在思考如何将它融入新的体系。我得到了准确的文本,它正在返回

'隐式转换丢失整数精度:'time_t'也称为'long'到'unsigned int'

这本书是Aaron Hillegass为Mac OS X编写的Cocoa编程,第三版,代码是:

#import "Foo.h"

@implementation Foo

-(IBAction)generate:(id)sender
{
    // Generate a number between 1 and 100 inclusive
    int generated;
    generated = (random() % 100) + 1;

    NSLog(@"generated = %d", generated);

    // Ask the text field to change what it is displaying
    [textField setIntValue:generated];
}

- (IBAction)seed:(id)sender
{
    // Seed the randm number generator with time
    srandom(time(NULL));
    [textField setStringValue:@"Generator Seeded"];
}

@end
它在srandomtimeNULL上;线路

如果我将时间替换为时间,则会出现另一条错误消息:

意外的类型名称“time”:意外的表达式


我不知道这两个词是什么意思。我读到的一个带有相同错误的问题显然与64位和32位整数有关,但是,嘿,我也不知道这意味着什么。或者如何修复它。

这只是一个通知。您正在将“long”赋值给“unsigned int”

解决办法很简单。只需单击指定该值的特定行左侧功能区上的黄色通知图标。它将显示一个解决方案。双击解决方案,它将自动完成所有操作


它将进行类型转换以匹配方程式。但是,下次请记住您分配的类型是相同的。。希望这有帮助。

这只是一个通知。您正在将“long”赋值给“unsigned int”

解决办法很简单。只需单击指定该值的特定行左侧功能区上的黄色通知图标。它将显示一个解决方案。双击解决方案,它将自动完成所有操作

它将进行类型转换以匹配方程式。但是,下次请记住您分配的类型是相同的。。希望这有帮助

我不知道这两个词是什么意思。我读到的一个带有相同错误的问题显然与64位和32位整数有关,但是,嘿,我也不知道这意味着什么。或者如何修复它

嗯,你真的需要多读一些书,这样你才能理解这些东西的意思,但这里有几点提示

当你在人类计数时,你通常使用十进制数字。十进制中有10位数字,从0到9。如果你想到一个计数器,比如电表或汽车里程表上的计数器,它有固定的位数。所以你可能有一个计数器,可以读取000000到999999,这是一个六位数的计数器

计算机用二进制表示数字,二进制有两位数字0和1。二进制数字称为位。考虑上面的反例,一个32位数字有32个二进制数字,一个64位数字有64个二进制数字

现在,如果你有一个64位的数字,去掉上面的32位,你可以改变它的值——如果值只有1,那么它仍然是1,但是如果它需要超过32位,那么结果将是一个不同的数字——就像将十进制9001截断为01会改变值一样

您的错误:

隐式转换降低了整数精度:“time\t”又称“long”到“unsigned int”

就是说,将一个较大的数字(long是计算机上的64位有符号整数类型,而不是每台计算机上的)截断为一个较小的数字(unsigned int是计算机上的32位无符号无负值整数类型)

在您的情况下,精度损失实际上并不重要,因为您使用的是语句中的数字:

srandomtimeNULL

这一行设置种子-一个随机数,用于确保程序的每次运行都获得不同的随机数。它使用时间作为种子,截断它不会有任何区别——它仍然是一个随机值。通过使用强制转换使转换显式,可以使警告静音:

但请记住,如果表达式的值很重要,则此类强制转换可能会产生数学上不正确的结果,除非已知该值在目标类型的范围内

现在去读更多

我不知道这两个词是什么意思。我读到的一个带有相同错误的问题显然与64位和32位整数有关,但是,嘿,我也不知道这意味着什么。或者如何修复它

嗯,你真的需要多读一些书,这样你才能理解这些东西的意思,但这里有几点提示

当你在人类计数时,你通常使用十进制数字。十进制中有10位数字,从0到9。如果你想到一个计数器,比如电表或汽车里程表上的计数器,它有固定的位数。所以你可能有一个计数器,可以读取000000到999999,这是一个六位数的计数器

计算机用二进制表示数字,二进制有两位数字0和1。二进制数字称为位。考虑上面的反例,一个32位数字有32个二进制数字,一个64位数字有64个二进制数字

现在,如果你有一个64位的数字,去掉上面的32位,你可以改变它的值——如果值只有1,那么它仍然是1 ,但如果它需要超过32位,那么结果将是一个不同的数字-就像将十进制9001截断为01会改变值一样

您的错误:

隐式转换降低了整数精度:“time\t”又称“long”到“unsigned int”

就是说,将一个较大的数字(long是计算机上的64位有符号整数类型,而不是每台计算机上的)截断为一个较小的数字(unsigned int是计算机上的32位无符号无负值整数类型)

在您的情况下,精度损失实际上并不重要,因为您使用的是语句中的数字:

srandomtimeNULL

这一行设置种子-一个随机数,用于确保程序的每次运行都获得不同的随机数。它使用时间作为种子,截断它不会有任何区别——它仍然是一个随机值。通过使用强制转换使转换显式,可以使警告静音:

但请记住,如果表达式的值很重要,则此类强制转换可能会产生数学上不正确的结果,除非已知该值在目标类型的范围内

现在去读更多


HTH

这个长解释涵盖了错误,但没有显示任何类型的解决方案。这个长解释涵盖了错误,但没有显示任何类型的解决方案。
srandom((unsigned int)time(NULL));