В C ++ Bool гарантированно будет 0 или 1 < /p>
C++ (§4.5/4):
An rvalue of type bool can be converted to an rvalue of type int, with
false becoming zero and true becoming one.
< /code>
Рассмотрим следующую функцию и что G ++ 5.2 генерирует с -O3 < /p>
int foo(bool a, bool b)
{
if(a&b) return 3;
else return 5;
}
0000000000000000 :
0: 40 84 ff test %dil,%dil
3: 74 13 je 18
5: 40 84 f6 test %sil,%sil
8: b8 03 00 00 00 mov $0x3,%eax
d: 74 09 je 18
f: f3 c3 repz retq
11: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
18: b8 05 00 00 00 mov $0x5,%eax
1d: c3 retq
< /code>
Как видно, выше, он генерирует две инструкции по тестированию, что указывает на то, что он все еще относится к if as a (a && b) вместо кубического и. То, что два операнда A и B могут иметь только 0/1 в качестве значений, есть ли способ заставить GCC генерировать только одну тестовую инструкцию. Это действительно то, что он делает, если функция принимает два INT вместо двух слоев.
Подробнее здесь: https://stackoverflow.com/questions/332 ... oolean-and
Принуждая использовать кусочек и вместо логического и ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1756574916
Anonymous
В C ++ Bool гарантированно будет 0 или 1 < /p>
C++ (§4.5/4):
An rvalue of type bool can be converted to an rvalue of type int, with
false becoming zero and true becoming one.
< /code>
Рассмотрим следующую функцию и что G ++ 5.2 генерирует с -O3 < /p>
int foo(bool a, bool b)
{
if(a&b) return 3;
else return 5;
}
0000000000000000 :
0: 40 84 ff test %dil,%dil
3: 74 13 je 18
5: 40 84 f6 test %sil,%sil
8: b8 03 00 00 00 mov $0x3,%eax
d: 74 09 je 18
f: f3 c3 repz retq
11: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
18: b8 05 00 00 00 mov $0x5,%eax
1d: c3 retq
< /code>
Как видно, выше, он генерирует две инструкции по тестированию, что указывает на то, что он все еще относится к if as a (a && b) вместо кубического и. То, что два операнда A и B могут иметь только 0/1 в качестве значений, есть ли способ заставить GCC генерировать только одну тестовую инструкцию. Это действительно то, что он делает, если функция принимает два INT вместо двух слоев.
Подробнее здесь: [url]https://stackoverflow.com/questions/33206772/forcing-usage-of-bitwise-and-instead-of-boolean-and[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия