#include <iostream>
union DoubleInt {
double asDouble;
uint64_t asInt;
};
static_assert(sizeof(double) == sizeof(uint64_t), "Strange machine with double != int64");
constexpr int BITS_MANTISSA = 52;
constexpr int BITS_EXPONENT = 11;
constexpr int BITS_SIGN = 1;
static_assert(BITS_MANTISSA + BITS_EXPONENT + BITS_SIGN == 64, "Programmer's funkup");
constexpr uint64_t MANTISSA_UNIT = uint64_t(1) << BITS_MANTISSA;
constexpr uint64_t MANTISSA_MASK = MANTISSA_UNIT - 1;
constexpr int EXPONENT_SHIFT = BITS_MANTISSA;
constexpr uint64_t EXPONENT_MAX = (uint64_t(1) << BITS_EXPONENT) - 1;
constexpr uint64_t EXPONENT_ORIGIN = EXPONENT_MAX >> 1;
constexpr uint64_t EXPONENT_MASK = EXPONENT_MAX << EXPONENT_SHIFT;
constexpr uint64_t EXPONENT_SHIFTED_ORIGIN = EXPONENT_ORIGIN << EXPONENT_SHIFT;
constexpr int SIGN_SHIFT = BITS_MANTISSA + BITS_EXPONENT;
constexpr uint64_t SIGN_MASK = uint64_t(1) << SIGN_SHIFT;
int main()
{
DoubleInt x { -3.45 };
// Простите уж, без денормализованных чисел
// Оставим знак и мантиссу
DoubleInt xMantissa = x;
xMantissa.asInt &= (MANTISSA_MASK | SIGN_MASK);
// И добавим туда стандартный нулевой порядок
xMantissa.asInt |= EXPONENT_SHIFTED_ORIGIN;
// Извлечём порядок
int exponent = ((x.asInt & EXPONENT_MASK) >> EXPONENT_SHIFT) - EXPONENT_ORIGIN;
std::cout << xMantissa.asDouble << "*2^" << exponent << std::endl;
return 0;
}
String str1 = "Hello";
String str2 = "Hello";
wiTile->~WiTile();
new (wiTile) WiTile(client(), icons, clazz, tileSettings(i));
// Какую концепцию проверяем?
// Это не просто проверка функции ListAll, это проверка какой-то концепции кода
// Варианты.
// 1. Пустой listAll() даёт пустой список.
// 2. Непустой listAll() даёт непустой список.
void testListAll() {
ArrayList<Product> productList = new ArrayList<Product>();
// Проводим поиск в списке — что в этот список вносится?
// И не будет ли физической зависимости тестов друг от друга?
// И для чего вообще нужен этот search, если мы listAll тестируем?
// Что такое ProductRepository и он вообще проверен?
when(this.productRepository.search((String) any())).thenReturn(productList);
// Ну, хорошо.
List<Product> actualListAllResult = this.productService.listAll("Keyword");
// Отказ, они не same: первый мы только что создали, а второй откуда-то пришёл.
assertSame(productList, actualListAllResult);
// Получается, что концепция — поиск, когда ничего не находится?
assertTrue(actualListAllResult.isEmpty());
verify(this.productRepository).search((String) any());
// Получается, единственная концепция, которую мы тестируем,— поиск в пустом списке даёт пустоту
// (и та некорректная из-за assertSame).
assertTrue(this.productService.getAll().isEmpty());
}
#include <stdio.h>
int main()
{
int sz = sizeof('A'); // латинское
printf("sz = %d\n", sz);
return 0;
}
char test='A'
на стеке будет 1 байт (+выравнивание). Здесь Си, грубо говоря, проводит преобразование типа — прямо при компиляции. Если написать char test=L'Й'
, сообщит, что преобразование при компиляции ushort→char обрежет результат с 1049 до 25. class AsyncSimpleContext { // интерфейс
public:
virtual void syncExec(const Runnable& body) = 0;
template <class Body>
void syncExecT(const Body& body); // тело упущу, тут всё стандартно,
// идиома «виртуальный шаблон»
}
class FmMain : public AsyncSimpleContext
{
// Разрешите не писать реализацию syncExec — тут всё просто:
// в конструкторе соединить сигнал со слотом методом BlockingQueuedConnection
// в syncExec проверить id потока и или вызвать прямо, или возбудить сигнал.
signals:
void sigSyncExec(const Runnable&);
private slots:
void slotSyncExec(const Runnable&);
}
не удается преобразовать 'char*' в 'int*' для аргумента '1' в 'int
недопустимое преобразование из 'int*' в 'int'
warning: narrowing conversion of '143' from 'int' to 'char' inside