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

Проверка числа на чётность - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Поток stdin http://www.cyberforum.ru/cpp-beginners/thread346415.html
Доброго времени суток. Ситуация следующая: пытаюсь расширить свои знания в программировании на С++, поэтому начал читать книгу Коплиена "Advanced C++Programming Styles and Idioms". Поставило в тупик следующее упражнение: Усовершенствуйте класс Stack так, чтобы следующий фрагмент создавал стек и читал его элементы из потока stdin (или любого другого заданного потока) до обнаружения признака...
C++ Диалог открытия файлов и запись в файл Привет всем! Возникла такая проблема: получаю из диалога открытия файла имя файла, в который нужно что-то записать. Вот фрагмент кода: private: System::Void openButton_Click(System::Object^ sender, System::EventArgs^ e) { //Запуск диалога if (mainOpenFileDialog->ShowDialog()==System::Windows::Forms::DialogResult::OK) { //Преобразование строки char... http://www.cyberforum.ru/cpp-beginners/thread346412.html
C++ c++ обработка файлов
ОЧЕНЬ нужна программа на c++. Из текстового файла А.txt вывести кол-во символов (не учитывая пробел) в файл B.txt Например в файле A.txt: "123 абв" файл B.txt перезаписываем на 6. :pardon: Выражу несомненную любоф к человеку решившему мою проблему 8-)
C++ while несколько условий
Нужно сделать чтоб при вводе символа проверяла тот ли символ #include <cstdlib> #include <iostream> #include <conio.h> using namespace std; int main(int argc, char *argv) {
C++ оптимизация кода! http://www.cyberforum.ru/cpp-beginners/thread346393.html
Народ я тут написал простенькую программу которая вычесляет x из уровнения вида a+x=b x+a=b a+b=x Тоесть пишешь например: 245+x=500 а программа выводит: x=500-245 x=255 Но мне кажеться я ее както примитивно написал... можно ли этот код как нить упростить?
C++ Аналог функции fprintf в с++ Здравствуйте! Я долго искал в гугле аналог функции fprintf в с++, но так и не нашел и решил написать на форуме. Существует ли в с++ аналог функции fprintf ? подробнее

Показать сообщение отдельно
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
29.08.2011, 21:01     Проверка числа на чётность
В любом случаи второй вариант быстрее.
Для такого кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
__declspec(noinline) int f_1(int n)
{
    return !(n % 2);
}
 
__declspec(noinline) int f_2(int n)
{
    return !(n & 1);
}
 
int main()
{
    int x; std::cin >> x; // Чтобы компилятор не перестарался с оптимизацией.. 
 
    int a = f_1(x);
    int b = f_2(x);
 
 
    std::cout << a << b; // Это тоже..
    return 0;
}
Получим
Assembler
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
    13: int main()
    14: {
01191030 55                   push        ebp  
01191031 8B EC                mov         ebp,esp  
01191033 51                   push        ecx  
    15:     int x; std::cin >> x;
01191034 8B 0D 48 20 19 01    mov         ecx,dword ptr [__imp_std::cin (1192048h)]  
0119103A 8D 45 FC             lea         eax,[x]  
0119103D 50                   push        eax  
0119103E FF 15 44 20 19 01    call        dword ptr [__imp_std::basic_istream<char,std::char_traits<char> >::operator>> (1192044h)]  
    16: 
    17:     int a = f_1(x);
01191044 8B 4D FC             mov         ecx,dword ptr [x]  
01191047 8B C1                mov         eax,ecx  
01191049 E8 B2 FF FF FF       call        f_1 (1191000h)  
0119104E 8B D0                mov         edx,eax  
    18:     int b = f_2(x);
01191050 8B C1                mov         eax,ecx  
01191052 E8 C9 FF FF FF       call        f_2 (1191020h)  
    19: 
    20: 
    21:     std::cout << a << b;
01191057 8B 0D 50 20 19 01    mov         ecx,dword ptr [__imp_std::cout (1192050h)]  
0119105D 50                   push        eax  
0119105E 52                   push        edx  
0119105F FF 15 4C 20 19 01    call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (119204Ch)]  
01191065 8B C8                mov         ecx,eax  
01191067 FF 15 4C 20 19 01    call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (119204Ch)]  
    22:     return 0;
0119106D 33 C0                xor         eax,eax  
    23: }
0119106F 8B E5                mov         esp,ebp  
01191071 5D                   pop         ebp  
01191072 C3                   ret  
.....
 
     8: __declspec(noinline) int f_2(int n)
     9: {
    10:     return !(n & 1);
01191020 F7 D0                not         eax  
01191022 83 E0 01             and         eax,1  
    11: }
01191025 C3                   ret  
.....
     3: __declspec(noinline) int f_1(int n)
     4: {
     5:     return !(n % 2);
01191000 25 01 00 00 80       and         eax,80000001h  
01191005 79 05                jns         f_1+0Ch (119100Ch)  
01191007 48                   dec         eax  
01191008 83 C8 FE             or          eax,0FFFFFFFEh  
0119100B 40                   inc         eax  
0119100C F7 D8                neg         eax  
0119100E 1B C0                sbb         eax,eax  
01191010 40                   inc         eax  
     6: }
01191011 C3                   ret
 
Текущее время: 17:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru