Как преобразовать CGFloat в целое число без знака - PullRequest
1 голос
/ 05 декабря 2010

Я пытаюсь получить строку, используя CGFloat, что-то вроде этого ..

helpMessage = [NSString stringWithFormat:@"The unsigned integer value is %i", (unsigned int)myCGFloat];

Это не хочет работать. Учитывая значение CGFloat -2, я получаю 0 в строке.

Если я использую ...

helpMessage = [NSString stringWithFormat:@"The unsigned integer value is %i", (int)myCGFloat];

Я получаю -2. Это становится ближе. Поэтому я подумал, что могу использовать @u в качестве спецификатора формата, но я получаю 4294967294.

Что я делаю не так.

Заранее спасибо за любую помощь. Это должно быть легко.

John

Ответы [ 3 ]

3 голосов
/ 05 декабря 2010

Вы получаете 4294967294, потому что после преобразования вашего значения в unsigned int, нет бит, который можно использовать для представления отрицательности -2, поэтому вместо этого значение «уменьшается» на 2, так сказать:

0
4294967295 (-1)
4294967294 (-2)

Вы должны форматировать как целое число со знаком (%i), если вы хотите отображать отрицательные значения. Диапазон 32-разрядного целого числа со знаком - от -2147483648 до 2147483647, а 32-разрядного целого числа без знака - от 0 до 4294967295.

1 голос
/ 05 декабря 2010

Хорошо.Спасибо за ответы, которые я понял ...

helpMessage = [NSString stringWithFormat:@"The abasolute value is %i", abs((int)myCGFloat]);

Я пробовал abs прямо на CGFloat, но теперь я вижу, что abs ожидает значение int.Я думал, что неподписанный int - это то же самое, что абсолютное значение.Спасибо, что поправили меня.

Джон

1 голос
/ 05 декабря 2010

То есть вы пытаетесь разыграть -2 без знака int? Целое число без знака не может быть меньше 0. Таким образом, оно будет представлено неправильно.

...