реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как извлечь short из int'a в С для BF
Grumbler_2002
сообщение Apr 26 2007, 21:59
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 5-01-05
Из: г. Зеленоград
Пользователь №: 1 817



Надо сдвинуть 32-битный регистр и использовать потом старшее и младшее слова этого регистра. Ума не приложу, как сделать это из Си.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 26 2007, 22:06
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Ума не приложу о чем это sad.gif?
Начните со сдвигов - постой? циклический?
Дальше - сдвинули что-то как-то куда-то как-то. Что после этого мешает продолжать "использовать" что-то.

short hi = reg>>16;
short lo = (short)reg;

Или мы о чем?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Grumbler_2002
сообщение Apr 26 2007, 22:12
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 5-01-05
Из: г. Зеленоград
Пользователь №: 1 817



Эквивалент
R0<<=1;
R1=Op(R0.h);
R2=Op(R0.l);
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 26 2007, 22:15
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Grumbler_2002 @ Apr 26 2007, 22:12) *
Эквивалент
R0<<=1;
R1=Op(R0.h);
R2=Op(R0.l);


reg <<= 1;
short hi = reg>>16;
short lo = (short)reg;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Grumbler_2002
сообщение Apr 26 2007, 22:18
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 5-01-05
Из: г. Зеленоград
Пользователь №: 1 817



И че, компилятор рюхнет, что сдвигать reg не надо, а надо взять его старшую часть?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 26 2007, 22:22
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Grumbler_2002 @ Apr 26 2007, 22:18) *
И че, компилятор рюхнет, что сдвигать reg не надо, а надо взять его старшую часть?

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 26 2007, 22:36
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(Grumbler_2002 @ Apr 26 2007, 22:59) *
Надо сдвинуть 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"
*********************************************************************/
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 26 2007, 22:45
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Serg76 @ Apr 26 2007, 22:36) *
Если нет, то смотри далее

&0xff00 и &0xff
1. Должны быть как минимум 0xffff0000 и 0x0000ffff дабы, как минимум просто не навредить;
2. Вообще не нужны ввиду полной нахренненужности.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 27 2007, 10:38
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(zltigo @ Apr 26 2007, 23:45) *
&0xff00 и &0xff
1. Должны быть как минимум 0xffff0000 и 0x0000ffff дабы, как минимум просто не навредить;
2. Вообще не нужны ввиду полной нахренненужности.

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

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


Цитата(zltigo @ Apr 26 2007, 23:45) *
&0xff00 и &0xff
1. Должны быть как минимум 0xffff0000 и 0x0000ffff дабы, как минимум просто не навредить;
2. Вообще не нужны ввиду полной нахренненужности.

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

по первому пункту согласен, тут я сам напорол косяков smile.gif - сыграл человеческий фактор, а что касается наложений масок и начальной инициализации, то это считается хорошим тоном, да и вообще лишний раз подстраховаться не помешает, а то бывали случаи, что сидишь в отладчике сутками, не можешь ошибку выявить, а оказывается где-то что-то не обнулил или еще что-то подобное.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 27 2007, 11:15
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Serg76 @ Apr 27 2007, 10:38) *
а что касается наложений масок и начальной инициализации, то это считается хорошим тоном

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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Grumbler_2002
сообщение Apr 27 2007, 20:03
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 5-01-05
Из: г. Зеленоград
Пользователь №: 1 817



Нашел всё, что нужно было. Есть тип int2x16 и встроенные типы __built_in_lo/__built_in_hi.
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 27 2007, 22:23
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(zltigo @ Apr 27 2007, 12:15) *
Хорошим тоном является не писать абсолютно лишнего и бесполезного кода, который кто-то будет читать и отвлекаться на поиски отсутствующего sad.gif смысла в оном. Ну и заодно "косяков" сами не напорете при его написании, превратив бесполезный во вредный.

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

По всей видимости, Вы не сталкивались с данными ситуациями, а значит либо мало кодите, либо так все обходилось, ибо не бывает кода без ошибок. Дай Бог Вам счастья и в дальнейшем.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 27 2007, 23:25
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Serg76 @ Apr 27 2007, 22:23) *
По всей видимости, Вы не сталкивались с данными ситуациями, а значит либо мало кодите, либо так все обходилось...

На так, авось и вдруг не надеюсь. Я знаю что я делаю и какими средствами пользуюсь. Просто минимальный профессионализм.
Если Вы вдруг сталкивались - просветите насчет "инструмента" который вдруг позволил выдать разный
результат на:
Код
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;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 27 2007, 23:40
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(zltigo @ Apr 28 2007, 00:25) *
На так, авось и вдруг не надеюсь. Я знаю что я делаю и какими средствами пользуюсь. Просто минимальный профессионализм.
Если Вы вдруг сталкивались - просветите насчет "инструмента" который вдруг позволил выдать разный
результат на:
Код
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;

В этом случае результаты будут, конечно же, идентичны, но у меня это уже дело привычки, и поверьте лучше все-таки переменные инициализировать, тогда и переживать не придёться.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 28 2007, 00:00
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Serg76 @ Apr 27 2007, 23:40) *
и поверьте лучше все-таки переменные инициализировать, тогда и переживать не придёться.

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

И что характерно - никаких пустых переживаний smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01467 секунд с 7
ELECTRONIX ©2004-2016