Сб мар 26, 2022 09:04:38
Как понимается конструкция С++ по правилам этого языка?
Надо С увеличить на единицу и вернуть СТАРОЕ (т.е. не увеличенное) значение.
Сб мар 26, 2022 13:33:04
4
Да, уж. С++ становится все сложнее и сложнее, понять чужую программу становится все проблематичней (вангую, лет через пять в ответственных конторах писать на нем просто запретят). –
avp
30 окт 2016 в 10:39
@avp На мой взгляд это крайне гнеудачное решение Комитета по стандартизации C++. –
Vlad from Moscow
30 окт 2016 в 10:41
2
На самом деле, проблема глубже (и это, так сказать, "родовая травма"). Проблема в том, что С++ это как минимум 2 языка (один для программирования на высоком уровне, а второй (включая шаблоны и т.п.) предназначен для создания первого, используя по сути его же синтаксические основы). Результаты этой шизофрении мы и видим. –
avp
30 окт 2016 в 10:50
Сб мар 26, 2022 14:18:15
Сб мар 26, 2022 17:34:45
Сб мар 26, 2022 17:45:56
Сб мар 26, 2022 18:18:43
Сб мар 26, 2022 22:47:36
Вс мар 27, 2022 08:18:46
Вс мар 27, 2022 09:59:04
Вс мар 27, 2022 10:18:21
Ср мар 30, 2022 17:38:35
Ср мар 30, 2022 18:24:48
Чт мар 31, 2022 09:30:04
почитайте эту тему где-то ближе к первой трети... пару лет назад я тут пытался вести дискуссию о void, но никто не согласен, что это костыль.vek писал(а):Если int функция может делать то-же самое, что и void, но при этом мы можем спросить у нее возвращаемое значение... То не проще-ли уволить всех void, и применять всегда только int ?
настоящий программист никогда не сомневается в догмах, сказанных гуру.VladislavS писал(а):Ну видно же, что это не ваше
Чт мар 31, 2022 19:34:11
Чт мар 31, 2022 20:09:14
bool f = 1;
uint32_t a = 0b10111101010101011001010;
uint32_t b = ((a << 1) & 0xFFF000) | (f << 11) | (a & 0x3FF);
Чт мар 31, 2022 20:29:57
Пт апр 01, 2022 07:38:25
Пт апр 01, 2022 09:00:43
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
uint32_t f1(uint32_t a, bool f)
{
uint32_t b = ((a << 1) & 0xFFF000) | (f << 11) | (a & 0x3FF);
return b;
}
uint32_t f2(uint32_t a, bool i)
{
uint32_t f = i ? 0x400 : 0;
uint32_t b = (a << 1) - (a & 0x3FF) + f;
return b;
}
int main()
{
printf("---1---\n");
{
uint32_t a = 0x000000; // вход
uint32_t r = 0x001000; // ожидаемый результат (12 бит в 1)
printf("0x%06X 0x%06X\n", a, f1(a, 1));
printf("0x%06X 0x%06X\n", a, f2(a, 1));
printf("0x%06X 0x%06X\n", a, r);
}
printf("---0---\n");
{
uint32_t a = 0x7FFFFF; // вход
uint32_t r = 0xFFEFFF; // ожидаемый результат (12 бит в 0)
printf("0x%06X 0x%06X\n", a, f1(a, 0));
printf("0x%06X 0x%06X\n", a, f2(a, 0));
printf("0x%06X 0x%06X\n", a, r);
}
return 0;
}
---1---
0x000000 0x000800
0x000000 0x000400
0x000000 0x001000
---0---
0x7FFFFF 0xFFF3FF
0x7FFFFF 0xFFFBFF
0x7FFFFF 0xFFEFFF
Пт апр 01, 2022 09:12:34
uint32_t foo(uint32_t a, bool f)
{
return ((a&0x7FF800)<<1) | (f?(1L<<11):0) | (a&0x7FF);
}
Пт апр 01, 2022 09:41:46
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
uint32_t f1(uint32_t a, bool f)
{
uint32_t b = ((a << 1) & 0xFFF000) | (f << 11) | (a & 0x3FF);
return b;
}
uint32_t f2(uint32_t a, bool i)
{
uint32_t f = i ? 0x400 : 0;
uint32_t b = (a << 1) - (a & 0x3FF) + f;
return b;
}
uint32_t foo(uint32_t a, bool f)
{
return ((a & 0xFFF800) << 1) | (f ? (1L << 11) : 0) | (a & 0x7FF);
}
int main()
{
printf("---1---\n");
{
uint32_t a = 0x000000; // вход
uint32_t r = 0x000800; // ожидаемый результат (11 бит в 1)
printf("Test f1 0x%06X: %s\n", a, f1(a, 1) == r ? "OK" : "FAIL");
printf("Test f2 0x%06X: %s\n", a, f2(a, 1) == r ? "OK" : "FAIL");
printf("Test foo 0x%06X: %s\n", a, foo(a, 1) == r ? "OK" : "FAIL");
}
printf("---0---\n");
{
uint32_t a = 0x7FFFFF; // вход
uint32_t r = 0xFFF7FF; // ожидаемый результат (11 бит в 0)
printf("Test f1 0x%06X: %s\n", a, f1(a, 0) == r ? "OK" : "FAIL");
printf("Test f2 0x%06X: %s\n", a, f2(a, 0) == r ? "OK" : "FAIL");
printf("Test foo 0x%06X: %s\n", a, foo(a, 0) == r ? "OK" : "FAIL");
}
return 0;
}
---1---
Test f1 0x000000: OK
Test f2 0x000000: FAIL
Test foo 0x000000: OK
---0---
Test f1 0x7FFFFF: FAIL
Test f2 0x7FFFFF: FAIL
Test foo 0x7FFFFF: OK