Перейти к содержанию
    

Как извлечь short из int'a в С для BF

Надо сдвинуть 32-битный регистр и использовать потом старшее и младшее слова этого регистра. Ума не приложу, как сделать это из Си.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ума не приложу о чем это :(?

Начните со сдвигов - постой? циклический?

Дальше - сдвинули что-то как-то куда-то как-то. Что после этого мешает продолжать "использовать" что-то.

 

short hi = reg>>16;

short lo = (short)reg;

 

Или мы о чем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И че, компилятор рюхнет, что сдвигать reg не надо, а надо взять его старшую часть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И че, компилятор рюхнет, что сдвигать reg не надо, а надо взять его старшую часть?

Это уже от компилятора зависит. Приличные обычно разбираются. В стандартном "C" других путей нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо сдвинуть 32-битный регистр и использовать потом старшее и младшее слова этого регистра. Ума не приложу, как сделать это из Си.

Это чё прикол такой новый ????? Если нет, то смотри далее

 

/********************************************************************

unsigned u_reg = 0x1111; // (например, двигаем регистр "0001000100010001" (bin)

unsigned short u_reg1=0x00,u_reg2=0x00;

 

// на сколько бит сдвигаем и куда?????????

// например, на 1 бит влево

u_reg <= 1; // "0010001000100010"

// старшее слово

u_reg1 = (unsigned short)((u_reg&0xff00)>>16); // "00100010"

// младшее слово

u_reg2 = (unsigned short)(u_reg&0xff); // "00100010"

*********************************************************************/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если нет, то смотри далее

&0xff00 и &0xff

1. Должны быть как минимум 0xffff0000 и 0x0000ffff дабы, как минимум просто не навредить;

2. Вообще не нужны ввиду полной нахренненужности.

 

Явная инициализация переменных нулями тоже совсем никчему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

&0xff00 и &0xff

1. Должны быть как минимум 0xffff0000 и 0x0000ffff дабы, как минимум просто не навредить;

2. Вообще не нужны ввиду полной нахренненужности.

 

Явная инициализация переменных нулями тоже совсем никчему.

по первому пункту согласен, тут я сам напорол косяков :) , а что касается наложений масок и начальной инициализации, то это считается хорошим тоном, да и вообще лишний раз подстраховаться не помешает.

 

 

&0xff00 и &0xff

1. Должны быть как минимум 0xffff0000 и 0x0000ffff дабы, как минимум просто не навредить;

2. Вообще не нужны ввиду полной нахренненужности.

 

Явная инициализация переменных нулями тоже совсем никчему.

по первому пункту согласен, тут я сам напорол косяков :) - сыграл человеческий фактор, а что касается наложений масок и начальной инициализации, то это считается хорошим тоном, да и вообще лишний раз подстраховаться не помешает, а то бывали случаи, что сидишь в отладчике сутками, не можешь ошибку выявить, а оказывается где-то что-то не обнулил или еще что-то подобное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что касается наложений масок и начальной инициализации, то это считается хорошим тоном

Хорошим тоном является не писать абсолютно лишнего и бесполезного кода, который кто-то будет читать и отвлекаться на поиски отсутствующего :( смысла в оном. Ну и заодно "косяков" сами не напорете при его написании, превратив бесполезный во вредный.

да и вообще лишний раз подстраховаться не помешает

От желания "подстраховаться" хорошо помогает изучение языка программирования а не чтение правил хорошего тона и чужих неведомо кем писанных исходников выложеных в интернет по причине их полной "бесценности" :).

Практически единственным средством (не то, что-бы подстраховки, а средством облегчения чтения), пожалуй, в "C" следует признать использование скобок для подчеркивания приоритетов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел всё, что нужно было. Есть тип int2x16 и встроенные типы __built_in_lo/__built_in_hi.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хорошим тоном является не писать абсолютно лишнего и бесполезного кода, который кто-то будет читать и отвлекаться на поиски отсутствующего :( смысла в оном. Ну и заодно "косяков" сами не напорете при его написании, превратив бесполезный во вредный.

 

От желания "подстраховаться" хорошо помогает изучение языка программирования а не чтение правил хорошего тона и чужих неведомо кем писанных исходников выложеных в интернет по причине их полной "бесценности" :).

Практически единственным средством (не то, что-бы подстраховки, а средством облегчения чтения), пожалуй, в "C" следует признать использование скобок для подчеркивания приоритетов.

По всей видимости, Вы не сталкивались с данными ситуациями, а значит либо мало кодите, либо так все обходилось, ибо не бывает кода без ошибок. Дай Бог Вам счастья и в дальнейшем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По всей видимости, Вы не сталкивались с данными ситуациями, а значит либо мало кодите, либо так все обходилось...

На так, авось и вдруг не надеюсь. Я знаю что я делаю и какими средствами пользуюсь. Просто минимальный профессионализм.

Если Вы вдруг сталкивались - просветите насчет "инструмента" который вдруг позволил выдать разный

результат на:

unsigned short u_reg1 = 0;
unsigned short u_reg2 = 0;
u_reg1 = (unsigned short)((u_reg&0xffff0000)>>16);
u_reg2 = (unsigned short)(u_reg&0xffff);

и

unsigned short u_reg1;
unsigned short u_reg2;
u_reg1 = (unsigned short)(u_reg>>16);
u_reg2 = (unsigned short)u_reg;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На так, авось и вдруг не надеюсь. Я знаю что я делаю и какими средствами пользуюсь. Просто минимальный профессионализм.

Если Вы вдруг сталкивались - просветите насчет "инструмента" который вдруг позволил выдать разный

результат на:

unsigned short u_reg1 = 0;
unsigned short u_reg2 = 0;
u_reg1 = (unsigned short)((u_reg&0xffff0000)>>16);
u_reg2 = (unsigned short)(u_reg&0xffff);

и

unsigned short u_reg1;
unsigned short u_reg2;
u_reg1 = (unsigned short)(u_reg>>16);
u_reg2 = (unsigned short)u_reg;

В этом случае результаты будут, конечно же, идентичны, но у меня это уже дело привычки, и поверьте лучше все-таки переменные инициализировать, тогда и переживать не придёться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и поверьте лучше все-таки переменные инициализировать, тогда и переживать не придёться.

1. Инициализацию глобальных переменных я всегда указываю делать компилятору (кстати, не встречал компилятора, где это не было-бы опцией по умолчанию). Это ему делать много сподручнее и главное абсолютно надежно, в отличие от ручного прописывания каждой переменной. Не говоря уже о лишнем коде получающемся при этом.

2. Инициализация локальных делается по необходимости и я прослеживаю, дабы waning-и компилятора об использовании переменной до ее инициализации не были подавлены. Компиляторов без такого warnig я что-то уже давно не припомню.

 

И что характерно - никаких пустых переживаний :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...