Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2015, 16:20   #1
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию Может кто объяснить что происходит в этих двух строках.

Привет.

Что будет если подать 5 и -5 ?
И как это вообще работает ?

Код:
int myAbs(int a){
    int oldByte = (a >> 31)& 0x1;
    return -a*(1+oldByte-1)-a*(oldByte-1);
}
Больше всего не понятно вот это (a >> 31)& 0x1;

А это на сколько я понял битовый сдвиг (a >> 31) ? ил нет ?
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 31.10.2015, 16:27   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Сдвиг знакового бита вправо на 31 позицию и логический И с 1
В результате oldByte =1 если a<0 и 0 если a>=0
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.10.2015, 16:31   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

http://habrahabr.ru/post/269875/
waleri вне форума Ответить с цитированием
Старый 31.10.2015, 19:27   #4
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Цитата:
Аватар
А поему именно такая нотация "& 0x1;" ? почему нет вот такая "& 1;"
Или это какой-то адрес в памяти ?

Цитата:
waleri
Я это там и прочитал но к сожалению не имею прав для комментов.
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 31.10.2015, 19:34   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

0x1 - единица в шестнадцатиричной записи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.10.2015, 20:16   #6
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

А почему тогда не написать в десятичной. И будет ли разница если дизассемблировать ?

И вообще зачем писать & 0x1; если 0x1 это константа ? Она же всегда будет 0x1 ил нет ?

Извините что гружу
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 31.10.2015, 20:48   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Битовые маски как-то принято записывать в шестнадцатеричном формате. Тогда на глаз почти сразу понятно с какими битами что происходит. Как раз дизассемблер обычно в 16-ом формате показывает константы.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 01.11.2015, 00:42   #8
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Понял теперь все. Большое спасибо всем !
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что в этих строках не так--найти количество симв., и найти в строке букву и измер. длину(2, 3 -с помощ. масивов) символ, Max11 Общие вопросы C/C++ 2 15.05.2012 08:11
Что означает void setup, кто может объяснить, напишите(((((( yulja-uk Помощь студентам 1 21.12.2011 10:58
Кто нибудь может объяснить почему это так? Fedor111 Общие вопросы C/C++ 1 24.09.2011 20:12
кто может объяснить,почему на моем компе программа работает на других нет?код в Delphi Symba Общие вопросы Delphi 1 24.03.2011 01:03
кто может объяснить??? Надежда Карунова Помощь студентам 1 25.11.2010 17:38