Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
GBIT
13 / 13 / 5
Регистрация: 05.10.2011
Сообщений: 219
#1

Как поместить число 4294967296 в переменную? - C++

26.02.2012, 12:17. Просмотров 2698. Ответов 25
Метки нет (Все метки)

делаю ip калькулятор,
если используется маска 0.0.0.0 то кол-во хостов в сети = 4294967296

вот не знаю какой тип переменной использовать чтобы поместилось такое число.
вроде float нормально должен помещать. но что-то тут не так..

+ еще это число нужно вывести на экран через printf

к примеру:
C++
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
void main ()
{
    float a=4294967296;
 
    printf("%lf",a);
 
}
на выходе 4294967296.00000
а мне нужно без запятой, только целую часть.

пробовал переделать на double дк вообще не получилось вывести число
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2012, 12:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как поместить число 4294967296 в переменную? (C++):

Как поместить в шаблон статическую переменную?
мучаюсь вторые стуки, не где не могу найти решения проблемы, смысл в следующим,...

Как поместить в объявленную память переменную класса?
Вот, например, создал я массив class_name *array = new class_name ; Как я...

Поместить код символа в переменную. Sprintf
char a; int i=1; char b; sprintf(b,&quot;%d&quot;,i); a=b; Собсно,ведь код...

Ping...неудается с функцию system поместить переменную
неудается с функцию system поместить переменную...при запуске выводит что...

Как в C++ записать в переменную дробное число?
Здравствуйте форумчане. Только начал осваивать азы программирования с++ и...

Как записать в переменную int** x число?
Как записать в переменную int** x число?

25
dimcoder
Полярный
467 / 440 / 157
Регистрация: 11.09.2011
Сообщений: 1,142
26.02.2012, 12:22 #2
Ну допустим:

C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main ()
{
        long long int a = 4294967296;
 
        printf("%lli",a);
        
        return 0;
}
http://liveworkspace.org/code/71d1f1eb6f21312bdb1f19d4ee474a44

Или еще больше:

C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main ()
{
        unsigned long long int a = 4294967296;
 
        printf("%lli",a);
        
        return 0;
}
http://liveworkspace.org/code/d87022b6d7dc12b563a5c7f56f2d89c2
1
9-loh
2 / 2 / 2
Регистрация: 18.12.2010
Сообщений: 31
26.02.2012, 12:23 #3
long long
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,438
Записей в блоге: 30
26.02.2012, 12:51 #4
Тут достаточно 32-битного беззнакового типа. Главное - к константе прилепить правильный суффикс, потому как константы по дефолту трактуются как типа int, а в int данная константа не влезает

C
1
unsigned u = 4294967296u;
1
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
26.02.2012, 13:19 #5
Лучший ответ Сообщение было отмечено как решение

Решение

Evg, UINT_MAX на единицу меньше, обнулится оно при таком подходе...
http://liveworkspace.org/code/c803e153951edb4ece2402a67cdd6e70
3
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,438
Записей в блоге: 30
26.02.2012, 13:33 #6
От чёрт... не заметил. Тогда надо использовать 64-битный целочисленный тип long long или unsigned long long, понимая при этом, что старые компиляторы его не поддерживают. Но суффикс для константы всё равно придётся писать, потому как без суффикса константа будет трактоваться как int'овая, а потому компилятор может обрезать её значение

C
1
2
long long a = 4294967296LL;
unsigned long long b = 4294967296ULL;
Коды из поста #2, запущенные на codepad.org скорее всего не скомпилируются, т.к. компилятор выдаст предупреждение (а на том ресурсе компилятор настраивается на кучу предупреждений, а так же на то, чтобы предупреждения трактовать как ошибки). Просто сайт сейчас что-то не работает и проверить не могу. Т.е. такое написание кода с точки зрения стандарта является НЕкорректным, хотя современные компиляторы в таких случаях строят "правильный" код. Но не факт, что все компиляторы поступят именно так
0
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
26.02.2012, 14:31 #7
gcc работает
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>
 
int main( void ) {
 
long long a= 4294967296LL;
 
printf( "%I64d\n", a );
return 0;
 
}
0
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
26.02.2012, 14:33 #8
Впрочем gcc работает и вот так
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
 
int main( void ) {
 
int64_t a= 4294967296LL;
 
printf( "%I64d\n", a );
return 0;
 
}
0
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
26.02.2012, 14:38 #9
Совсем правильная печать 64-битных чисел
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define __STDC_FORMAT_MACROS 1
 
#include <stdio.h>
#include <inttypes.h>
 
int main( void ) {
 
int64_t a = 4294967296LL;
 
printf( "%" PRId64 "\n", a );
 
return 0;
 
}
0
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
26.02.2012, 14:52 #10
Цитата Сообщение от odip Посмотреть сообщение
Впрочем gcc работает и вот так
К сожалению, не работает http://liveworkspace.org/code/33cfcad3fc953dfcb54ca9b225f4f93d
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,438
Записей в блоге: 30
26.02.2012, 14:56 #11
Цитата Сообщение от odip Посмотреть сообщение
Совсем правильная печать 64-битных чисел
"Совсем правильная" с точки зрения чего? Может это уже Си99?
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 51
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
26.02.2012, 17:17 #12
unsigned long long - целый тип(может содержать до 20 знаков)
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,438
Записей в блоге: 30
26.02.2012, 17:55 #13
Цитата Сообщение от sovaz1997 Посмотреть сообщение
unsigned long long - целый тип(может содержать до 20 знаков)
Не "до 20 знаков", а "от 0 до 18.446.744.073.709.551.615"
0
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
26.02.2012, 18:12 #14
Цитата Сообщение от Evg Посмотреть сообщение
"от 0 до
Громко сказано. Гарантировано не менее, но может быть и другое значение.
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
26.02.2012, 20:00 #15
Да в gcc что только не работает
C
1
printf("%lli\n", 4294967296LL);
Добавлено через 2 минуты
Цитата Сообщение от go Посмотреть сообщение
Громко сказано.
Правильно сказано. ...Может принимать значения от 0 до 18.446.744.073.709.551.615 включительно, если так понятнее...
0
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
26.02.2012, 20:03 #16
Цитата Сообщение от easybudda Посмотреть сообщение
Правильно сказано.
Доказательство то где? http://ru.wikipedia.org/wiki/Limits.h
0
A555
51 / 51 / 4
Регистрация: 04.04.2011
Сообщений: 209
26.02.2012, 20:17 #17
чего вы паритесь воспользуйтесь длинной арифметикой и засуньте это число в массив по 4 элемента
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,438
Записей в блоге: 30
26.02.2012, 23:16 #18
Цитата Сообщение от go Посмотреть сообщение
Доказательство то где?
Доказательство чего?
0
NoMasters
Псевдослучайный
1909 / 1120 / 90
Регистрация: 13.09.2011
Сообщений: 3,179
26.02.2012, 23:40 #19
Зато с %lld работает

Не по теме:

i'm slowpoke

0
villu
203 / 204 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
26.02.2012, 23:51 #20
если используется маска 0.0.0.0 то кол-во хостов в сети = 4294967296
Минус 0.0.0.0
Минус 255.255.255.255
Итого количественно 4294967294
Хватит обычного беззнакового инта.
0
26.02.2012, 23:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 23:51
Привет! Вот еще темы с решениями:

Как записать шестнадцатеричное число в переменную типа string?
Есть ф-ция, которая переводит целочисленный переменные или просто цифры в...

При вводе в переменную через scanf число 0.5 записывается как 0
Всем привет, столкнулся с такой проблемой: В универе надо простенькую задачку...

Как проверить, что пользователь ввел число в переменную string?
Скажите пожалуйста как проверить что пользователь ввел число в переменную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru