Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
898
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
950
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
940
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1725
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4398
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как вы форматируете unsigned long long int, используя printf?
#include <stdio.h>
int main() {
unsigned long long int num = 285212672; //FYI: fits in 29 bits
int normalInt = 5;
printf("My number is %d bytes wide and its value is %ul. A normal number is %d.\n", sizeof(num), num, normalInt);
return 0;
}
#include <stdio.h>
int main() {
unsigned long long int num = 285212672; //FYI: fits in 29 bits
int normalInt = 5;
printf("My number is %d bytes wide and its value is %ul. A normal number is %d.\n", sizeof(num), num, normalInt);
return 0;
}
Выход:
My number is 8 bytes wide and its value is 285212672l. A normal number is 0.
Я предполагаю, что этот неожиданный результат связан с печатью unsigned long long int . Как вы делаете printf() an unsigned long long int ?
Вы можете попробовать использовать библиотеку inttypes.h, которая предоставляет вам такие типы, как
int32_t , int64_t, uint64_t и т.д.
Затем вы можете использовать его macros, например:
uint64_t x;
uint32_t y;
printf("x: %"PRId64", y: %"PRId32"\n", x, y);
Это "guaranteed", чтобы не доставлять вам таких же проблем , как long, unsigned long long и т. д., Поскольку вам не нужно угадывать, сколько битов находится в каждом типе данных.
Это потому, что %llu не работает должным образом под Windows и %d не может обрабатывать 64-битные целые числа. Я предлагаю вместо этого использовать PRIu64, и вы обнаружите, что он также переносится на Linux.
Попробуйте это вместо этого:
#include <stdio.h>
#include <inttypes.h>
int main() {
unsigned long long int num = 285212672; //FYI: fits in 29 bits
int normalInt = 5;
/* NOTE: PRIu64 is a preprocessor macro and thus should go outside the quoted string. */
printf("My number is %d bytes wide and its value is %" PRIu64 ". A normal number is %d.\n", sizeof(num), num, normalInt);
return 0;
}
Выход
My number is 8 bytes wide and its value is 285212672. A normal number is 5.
В дополнение к тому, что люди писали много лет назад:
- вы можете получить эту ошибку на gcc/mingw:
main.c:30:3: warning: unknown conversion type character 'l' in format [-Wformat=]
printf("%llu\n", k);
Тогда ваша версия mingw не имеет значения c99 по умолчанию. Добавьте этот флаг компилятора: -std=c99 .
Ну, один из способов-скомпилировать его как x64 с VS2008
Это работает так, как вы и ожидали:
int normalInt = 5;
unsigned long long int num=285212672;
printf(
"My number is %d bytes wide and its value is %ul.
A normal number is %d \n",
sizeof(num),
num,
normalInt);
Для 32-битного кода нам нужно использовать правильный спецификатор формата _ _ int64 %I64u., чтобы он стал.
int normalInt = 5;
unsigned __int64 num=285212672;
printf(
"My number is %d bytes wide and its value is %I64u.
A normal number is %d",
sizeof(num),
num, normalInt);
Этот код работает как для 32, так и для 64-битного компилятора VS.
По-видимому, никто не придумал решение multi-platform* уже более десяти лет, начиная с 2008 года, поэтому я добавлю свое . Плз, голосуйте. (Шутка. Мне все равно.)
Решение: lltoa()
Как пользоваться:
#include <stdlib.h> /* lltoa() */
// ...
char dummy[255];
printf("Over 4 bytes: %s\n", lltoa(5555555555, dummy, 10));
printf("Another one: %s\n", lltoa(15555555555, dummy, 10));
Пример OP х :
#include <stdio.h>
#include <stdlib.h> /* lltoa() */
int main() {
unsigned long long int num = 285212672; // fits in 29 bits
char dummy[255];
int normalInt = 5;
printf("My number is %d bytes wide and its value is %s. "
"A normal number is %d.\n",
sizeof(num), lltoa(num, dummy, 10), normalInt);
return 0;
}
В отличие от строки формата печати %lld , эта строка работает для меня под 32-битным GCC на Windows.
* ) Ну, почти мультиплатформенный. В MSVC вам, по-видимому, нужен _ui64toa() вместо lltoa() .