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

Модульное деление на степень двойки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ C++ почему прога вылетает, не успеваю посмотреть действие http://www.cyberforum.ru/cpp-beginners/thread718705.html
дан массив строк, если какая либо строка заканчивается буквой k, то удалить эту строку, вод что я написал: #include <iostream.h> #include <conio.h> #include <stdio.h> #include <math.h> #include <string> #define n 100 int main() {
C++ В n мерном массиве целых чисел, вычислить сумму отрицательных элементов массива, положительных, и упорядочить все элементы массива по возрастанию Ребят помогите решить! В n мерном массиве целых чисел, вычислить сумму отрицательных элементов массива, сумму положит элементов массива, и упорядотчить все элементы массива по возрастанию http://www.cyberforum.ru/cpp-beginners/thread718693.html
C++ Из чисел от 10 до 99 вывести те, сумма цифр которых равна n
Из чисел от 10 до 99 вывести те, сумма цифр которых равна n (n вводится с клавиатуры, n =< 18) Очень прошу. Заранее благодарен.
C++ CUDA C/C++ сложение векторов
вроде все так делаю, но не запускается не могу понять ошибку делаю с шаблона там просто надо заполнить недастоющие строчки вот шаблон // MP 1 #include <wb.h> __global__ void vecAdd(float * in1, float * in2, float * out, int len) { //@@ Insert code to implement vector addition here }
C++ Квадрат натурального числа n http://www.cyberforum.ru/cpp-beginners/thread718682.html
Проверить, содержит ли квадрат натурального числа n цифру 3 в своей записи. Большое спасибо заранее!
C++ Найти количество слов, у которых первый и последний символы совпадают между собой Помогите пожалуйста написать программу, никак разобраться не могу( подробнее

Показать сообщение отдельно
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
04.12.2012, 16:48
Написал тестовый пример.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
int mod1(int a, int mod)
{
    return a % mod;
}
 
int mod2(int a, int mod)
{
    return a & int(mod-1);
}
 
int main()
{
    int a=0, mod = 0;
    cout<<"Enter a: " ;cin>>a;
    cout<<"Enter mod: "; cin>>mod;
    cout<<"\n"<<mod1(a, mod)<<"\n";
    cout<<"\n"<<mod2(a, mod)<<"\n";
    return 0;
}
Откомпилировал студийным (VS 2012) компилятором с ключом оптимизации /O2 (Maximize speed).

Результат:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
?mod1@@YAHHH@Z PROC                 ; mod1, COMDAT
; _a$ = ecx
; _mod$ = edx
 
; 5    : {
 
    push    esi
    mov esi, edx
 
; 6    :    return a % mod;
 
    mov eax, ecx
    cdq
    idiv    esi
    pop esi
    mov eax, edx
 
; 7    : }
 
    ret 0
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
?mod2@@YAHHH@Z PROC                 ; mod2, COMDAT
; _a$ = ecx
; _mod$ = edx
 
; 11   :    return a & int(mod-1);
 
    lea eax, DWORD PTR [edx-1]
    and eax, ecx
 
; 12   : }
 
    ret 0
?mod2@@YAHHH@Z ENDP
Так что компилятор тут все "дословно" скомпилил. Ну это он не знает, что степень двойки, естессно.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru