2015-05-01 3 views
1

Я превратитьObjective C неподписанные символ отрицательному Int

unsigned char x = 0xEC в int y = -20

unsigned char x = 0xF0 в int y = -16

, если я бросаю, как это (при условии, x = 0xF0)

int y = (int)x 

I получите x = 240, то есть правильное десятичное представление 0xF0. Где я ошибаюсь? Как я могу получить отрицательное число?

+1

Вы пытались присвоить 'unsigned char'' char'? А затем 'char' на' int'? – rmaddy

+0

@rmaddy прав. Вы хотите, чтобы высокий бит установлен в подписанном 8-битном типе данных, а затем подписывается расширение, когда вы переходите к большему типу данных. –

+0

@rmaddy работает отлично! Поместите свой комментарий в ответ, чтобы я мог принять его как правильно. Благодарю. – Fry

ответ

2

Преобразование unsigned char в подписанный char первый, а затем собирается на int даст вам результат вы хотите:

unsigned char x = 0xEC; 
char x1 = (char)x; 
int x2 = x1; 

Как CRD указывает, спецификация C оставляет тот факт, что char может либо быть подписан или unsigned, поэтому безопасное решение здесь должно быть явным.

signed char x1 = (signed char)x; 
+0

Я думаю, что вы имели в виду 'подписанный символ'? – CRD

+0

@CRD 'char' - это то же самое, что' signed char'. – rmaddy

+0

нет нет, это пункт. В C, подписан ли 'char' или unsigned, зависит от реализации, поэтому необходимо использовать' signed char', чтобы быть правильным без предположений. – CRD

Смежные вопросы