|
Как извлечь short из int'a в С для BF |
|
|
|
Apr 26 2007, 22:06
|

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

|
Ума не приложу о чем это  ? Начните со сдвигов - постой? циклический? Дальше - сдвинули что-то как-то куда-то как-то. Что после этого мешает продолжать "использовать" что-то. short hi = reg>>16; short lo = (short)reg; Или мы о чем?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 26 2007, 22:15
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Apr 26 2007, 22:36
|
Профессионал
    
Группа: Участник
Сообщений: 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" *********************************************************************/
|
|
|
|
|
Apr 26 2007, 22:45
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Apr 27 2007, 10:38
|
Профессионал
    
Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775

|
Цитата(zltigo @ Apr 26 2007, 23:45)  &0xff00 и &0xff 1. Должны быть как минимум 0xffff0000 и 0x0000ffff дабы, как минимум просто не навредить; 2. Вообще не нужны ввиду полной нахренненужности.
Явная инициализация переменных нулями тоже совсем никчему. по первому пункту согласен, тут я сам напорол косяков  , а что касается наложений масок и начальной инициализации, то это считается хорошим тоном, да и вообще лишний раз подстраховаться не помешает. Цитата(zltigo @ Apr 26 2007, 23:45)  &0xff00 и &0xff 1. Должны быть как минимум 0xffff0000 и 0x0000ffff дабы, как минимум просто не навредить; 2. Вообще не нужны ввиду полной нахренненужности.
Явная инициализация переменных нулями тоже совсем никчему. по первому пункту согласен, тут я сам напорол косяков  - сыграл человеческий фактор, а что касается наложений масок и начальной инициализации, то это считается хорошим тоном, да и вообще лишний раз подстраховаться не помешает, а то бывали случаи, что сидишь в отладчике сутками, не можешь ошибку выявить, а оказывается где-то что-то не обнулил или еще что-то подобное.
|
|
|
|
|
Apr 27 2007, 11:15
|

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

|
Цитата(Serg76 @ Apr 27 2007, 10:38)  а что касается наложений масок и начальной инициализации, то это считается хорошим тоном Хорошим тоном является не писать абсолютно лишнего и бесполезного кода, который кто-то будет читать и отвлекаться на поиски отсутствующего  смысла в оном. Ну и заодно "косяков" сами не напорете при его написании, превратив бесполезный во вредный. Цитата да и вообще лишний раз подстраховаться не помешает От желания "подстраховаться" хорошо помогает изучение языка программирования а не чтение правил хорошего тона и чужих неведомо кем писанных исходников выложеных в интернет по причине их полной "бесценности"  . Практически единственным средством (не то, что-бы подстраховки, а средством облегчения чтения), пожалуй, в "C" следует признать использование скобок для подчеркивания приоритетов.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 27 2007, 22:23
|
Профессионал
    
Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775

|
Цитата(zltigo @ Apr 27 2007, 12:15)  Хорошим тоном является не писать абсолютно лишнего и бесполезного кода, который кто-то будет читать и отвлекаться на поиски отсутствующего  смысла в оном. Ну и заодно "косяков" сами не напорете при его написании, превратив бесполезный во вредный. От желания "подстраховаться" хорошо помогает изучение языка программирования а не чтение правил хорошего тона и чужих неведомо кем писанных исходников выложеных в интернет по причине их полной "бесценности"  . Практически единственным средством (не то, что-бы подстраховки, а средством облегчения чтения), пожалуй, в "C" следует признать использование скобок для подчеркивания приоритетов. По всей видимости, Вы не сталкивались с данными ситуациями, а значит либо мало кодите, либо так все обходилось, ибо не бывает кода без ошибок. Дай Бог Вам счастья и в дальнейшем.
|
|
|
|
|
Apr 27 2007, 23:25
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Apr 27 2007, 23:40
|
Профессионал
    
Группа: Участник
Сообщений: 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; В этом случае результаты будут, конечно же, идентичны, но у меня это уже дело привычки, и поверьте лучше все-таки переменные инициализировать, тогда и переживать не придёться.
|
|
|
|
|
Apr 28 2007, 00:00
|

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

|
Цитата(Serg76 @ Apr 27 2007, 23:40)  и поверьте лучше все-таки переменные инициализировать, тогда и переживать не придёться. 1. Инициализацию глобальных переменных я всегда указываю делать компилятору (кстати, не встречал компилятора, где это не было-бы опцией по умолчанию). Это ему делать много сподручнее и главное абсолютно надежно, в отличие от ручного прописывания каждой переменной. Не говоря уже о лишнем коде получающемся при этом. 2. Инициализация локальных делается по необходимости и я прослеживаю, дабы waning-и компилятора об использовании переменной до ее инициализации не были подавлены. Компиляторов без такого warnig я что-то уже давно не припомню. И что характерно - никаких пустых переживаний
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|