Articles of целочисленное

целочисленное извлечение из строки

У меня есть строка входных аргументов const char* s Я знаю, что она запускает последовательность символов, представляющих собой целочисленное представление, эта последовательность может иметь любую длину, включая 0. После того, как целочисленная последовательность следует за последовательностью символов, которые не являются целыми представлениями. например, “23meeting”,”1h” . Есть ли какая-то встроенная функция C, которая может извлечь целое […]

C целочисленное переполнение

Я работал с целыми числами на C, пытаясь узнать больше о том, когда и как происходит переполнение. Я заметил, что когда я добавил два положительных числа, сумма которых переполняется, я всегда получаю отрицательное число. С другой стороны, если бы я добавил два отрицательных числа, сумма которых переполняется, я всегда получал положительное число (включая 0). Я […]

Почему отрицание минимально возможного целого дает?

Поэтому я написал небольшой эксперимент по тестированию, переполненный и переполненный, используя c и 64-битную машину. Для типа int значения min / max: int tmax = 2147483647; int tmin = -2147483648; Я знаю, как работает два дополнения, это не мой вопрос. Поэтому я подумал, что произойдет, если я сделаю что-то отрицательное tmin? То есть: int tmin […]

Что не так с этим int для преобразования float в C?

Меня смущает выход следующего бита кода: float a = 1.32; int* b; b= &a; printf(“%d”, *b); Этот бит кода превращает float в int, но вывод, который я получаю, это: 1068037571 Связано ли это с возможностями преобразования IEEE 754 на компьютере? Спасибо!

Самый быстрый метод векторизованного целочисленного деления на непостоянный делитель

Основываясь на ответах на этот вопрос, я написал тест производительности с gcc 4.9.2 (MinGW64), чтобы оценить, какой способ множественного целочисленного деления выполняется быстрее: #include // SSE2 static unsigned short x[8] = {0, 55, 2, 62003, 786, 5555, 123, 32111}; // Dividend __attribute__((noinline)) static void test_div_x86(unsigned i){ for(; i; –i) x[0] /= i, x[1] /= i, […]

Наиболее эффективное переносное обнаружение переполнения?

Возможный дубликат: умножение больших чисел, как перехватить переполнение В непосредственной близости от металлических языков, таких как C, C ++ и D, что является наиболее эффективным разумно переносимым способом (т. Е. Без использования ассемблера, хотя вы можете предположить, что арифметика дополнений дополнений и поведение оболочки) обнаруживают переполнение 64-разрядного беззнакового целое число при умножении?

Быстрый пол знакового целочисленного деления в C / C ++

В C можно выполнить разделение полов, например: int floor_div(int a, int b) { int d = a / b; if (a < 0 != b < 0) { /* negative output (check inputs since 'd' isn't floored) */ if (d * a != b) { /* avoid modulo, use multiply instead */ d -= 1; […]

Преобразуйте INT_MAX в float, а затем обратно в целое.

В программировании на С, я нахожу странную проблему, которая учитывает мою интуицию. Когда я объявляю integer как INT_MAX ( 2147483647 , определенное в limit.h) и неявно преобразовываю его в значение float , он отлично работает, т. Е. Значение float совпадает с максимальным целым числом. И затем, я конвертирую float обратно в целое число, происходит что-то […]

C целочисленное поведение при переполнении при назначении целых чисел большей ширины

Если я выполнил следующий код в C: #include uint16_t a = 4000; uint16_t b = 8000; int32_t c = a – b; printf(“%d”, c); В результате он правильно выводит «-4000». Тем не менее, я немного смущен: не должно быть арифметического переполнения при вычитании большего числа без знака из другого? Какие правила кастинга здесь играют? Этот […]

Как оценивается оператор сдвига в C?

Недавно я заметил (странное) поведение, когда я проводил операции с использованием shift >> << ! Чтобы объяснить это, позвольте мне написать этот маленький исполняемый код, который выполняет две операции, которые должны быть идентичными (в моем понимании), но меня удивляют разные результаты! #include int main(void) { unsigned char a=0x05, b=0x05; // first operation a = ((a<>7); […]