АвторСообщение



Пост N: 8
Зарегистрирован: 21.02.12
Откуда: Украина, Луганская обл.
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.01.13 10:04. Заголовок: Си сравнение знаковых переменных (signed char)


По сути вопроса два :
1. Каков алгоритм сравнения знаковых переменных? (если знаки одинаковые, то все ясно, а вот с разными знаками ...)
2. Допускается ли в Си вот такие комбинации :

 цитата:

void func(signed a,b)
{
if(a ^ b){#define z >= } //если знаки разные употребляем <=
else {#define z <= }

if(a z b){........}
else {........}
}



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 4 [только новые]


moderator




Пост N: 256
Зарегистрирован: 10.02.11
Откуда: Россия
Рейтинг: 3
ссылка на сообщение  Отправлено: 02.01.13 12:50. Заголовок: anywhere пишет: 2. ..


anywhere пишет:

 цитата:
2. Допускается ли в Си вот такие комбинации :

Нет.
#define - команда препроцессора, т.е. обрабатывается только во время компиляции.


 цитата:
1. Каков алгоритм сравнения знаковых переменных?

Тут совсем не понятно. Что значит "каков алгоритм" ? Если интересует что происходит на низком уровне, то загляните в дизасм.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 9
Зарегистрирован: 21.02.12
Откуда: Украина, Луганская обл.
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.01.13 13:51. Заголовок: Отрицательное число ..


Отрицательное число представлено в обратном коде и поэтому больше положительного

 цитата:

signed char a;
signed char b;

a = -20; //-20 == 0b11101100
b = 12; // 12 == 0b00001100
if(a<b) {..........} // if выдает "о", хотя по логике должен выдавать "1"


Или компилятор учитывает эти ньюансы и обращает внимание на разряд знака ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 10
Зарегистрирован: 21.02.12
Откуда: Украина, Луганская обл.
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.01.13 17:29. Заголовок: anywhere пишет: Или..


anywhere пишет:

 цитата:
Или компилятор учитывает эти ньюансы и обращает внимание на разряд знака ?


Разобрался - компилятор учитывает бит знака. Просто необходимо всегда сопровождать значение типом signed , иначе он может переопределится как ansigned. У меня он переопределился в функции

 цитата:

signed char a;
unsigned char func(unsigned char c)
{.......}
void main(void)
{
func(a);
}


Беззнаковому аргументу "с" было присвоено значение знакового "а" - в результате компилятор в функции работал со значением с типом unsigned char

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 345
Зарегистрирован: 25.09.09
Откуда: г.Саратов
Рейтинг: 1
ссылка на сообщение  Отправлено: 03.01.13 09:00. Заголовок: http://shot.qip.ru/0..


http://shot.qip.ru/009EsZ-3cuDY80D2/
Пытаюсь освоить Си, только через "железо". Вашу задачу пробовал через 2-е лампочки. Получилось. Зажглась нужная лампочка. Не обращал внимание на этот вопрос. Теперь буду! Не обращайте внимание на вопросы в исходнике, это кириллица в программе FlowCode.


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 13
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия