Форум программистов, компьютерный форум CyberForum.ru

Странное поведение (сдвиг) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Соединение отрезков http://www.cyberforum.ru/cpp-beginners/thread92988.html
Дан массив целых чисел x..x, рассматриваемый как соединение двух его отрезков: начала x..x длины m и конца x..x длины n. Не использую дополнительных массивов переставить начало и конец.(число действий порядка m+n);
C++ The variable 'pp' is being used without being initialized В visual C++ 2008 EE создаю всё как надо ,в файле .cpp пишу вот такой текст программы: #include<iostream> #include<cmath> using namespace std; int main(){ double principal,intrate,pp,numyers,peyment,numer,denom,b,e; setlocale( LC_ALL,"Russian" ); http://www.cyberforum.ru/cpp-beginners/thread92966.html
C++ Что это означает?
if (!fgets(str,STRLEN, stdin)) и еще for(cnt=0,p=strtok(str,SPCHARS); p!=NULL;p= strtok(NULL,SPCHARS)) прокоментируете пожалуйста if(*p == *(p+strlen(p)-1)) ++cnt; плиззз
Прога на СИ!1!! C++
Распечатать введенную строку, удалив из нее символы, не являющиеся буквами и цифрами, и заменив каждую цифру на ‘*’. Очень нужна помощь кто может помочь буду благодарен... можно на почту или тут...
C++ Фибоначчи http://www.cyberforum.ru/cpp-beginners/thread92952.html
14. В заданном целочисленном массиве распечатать те элементы, порядковые номера которых – числа Фибоначчи, а также определить количество перемен знаков
C++ У меня контрольная(((( на с++ !Определить, сколько слов во введенном тексте начинаются и оканчиваются одной и той же буквой. Слова разделены пробелами!. подробнее

Показать сообщение отдельно
Alex83
13 / 13 / 0
Регистрация: 06.02.2010
Сообщений: 19

Странное поведение (сдвиг) - C++

06.02.2010, 15:29. Просмотров 466. Ответов 8
Метки (Все метки)

Здравствуйте.Прошу помочь с задачкой.
Программа , должна "сдвигать" данные в один бит(128), но при вызове функции с разными параметрами, выводит дублирующиеся значения результатов.
Суть проблемы: Не воспринимается изменение входящих параметров: этот кусок программы выводит белиберду такого вида....
!!!!!!54 : 0
SHIFT byte:54////////54-55 дубляж ! , но ведь значения функция принимает разные в каждом случае.
0011011
!!!!!!55 : 0
SHIFT byte:55
0011011

!!!!!!56 : 0
SHIFT byte:56/////////56-57 дубляж !
!!!!!!57 : 0
SHIFT byte:57
0011100
............................................

!!!!!!126 : 0
SHIFT byte:126///////////////////////126-127 дубляж ! Почему так ?
0111111
!!!!!!127 : 0
SHIFT byte:127
0111111

!!!!!!128 : 128
SHIFT byte:128
1000000// С чего вдруг , он соизволил вывести правильно ?
Press any key to continue

//////////////// А вот и исходник этой "беды"......
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream.h>
#include<conio.h>
#include<stdlib.h>
#include <stdio.h>
 
void padla(int addr)
{int a, p=0;
cout<<"SHIFT byte:"<<addr<<endl;
    for(p=7;p>0;p--)
    {
    if(!(addr&128)){cout<<"0";}
    else{cout<<"1";}
    addr=addr<<1;
    }
}
void main(){
 
int i;
for(i=0;i<129;i++)
{
    cout<<endl<<"!!!!!!"<<i<<" : "<<(i&128)<<endl;
    padla(i);cout<<endl;}
 
getch();
}
Для чего шифтуется "адрес": это клочек кода рабочей в принципе программы(и на 100% рабочей железки) , которая читает/пишет микросхему памяти (eeprom) 93с46 навешенную на LPT. Соответственно мне необходимо передавать опкод-адрес-данные.....И все в последовательной форме , через такой шифтинг.Ну вы представляете , во что превратится дамп после такой адресации.(64 по-парно одинаковых выходных значений при разном адресе на входе.) Вот только с функцией ,работающей с данными ,проблем нет(там уже8 бит, но похожий код). Мистика ?

Добавлено через 21 минуту
Если интересно.... Так сейчас выглядит сама функция вывода адреса в порт.

C++
1
2
3
4
5
6
7
8
9
10
11
void paddre(int addr)
{int p=0;
cout<<"paddre:::Send adress of byte:"<<addr<<endl;/// для того,чтобы увидеть принимаемое значение
    for(p=7;p>0;p--)
    {
    if(!(addr&128)){dsetlow();pclc();a=0;}//(если бит адреса=1) =/то выводим еденицу в порт
    if((addr&128)){dsethi();pclc();a=1;}//(если бит адреса=0) =/то выводим ноль в порт(там инвертер)
    addr=addr<<1;// здесь сдвигаем исходное значение влево , под "селектор".
    }//повторяем 7 раз , пока не пошлем весь адрес.
dsetlow(); // просто роняем шину и выходим...
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru