Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / вывод значений uint64 c++

вывод значений uint64 c++

Поделиться
slaxПостоялецwww2 ноя. 201710:09#0

http://cpp.sh/5zyjr

Прикидываю вместимость типов по-разному и сразу стал непонимать

int main()
{
    __uint64_t t;
    t=(2<<30)-1;std::cout<<"2<<30-1 = "<<t<<"\n";
    t=(2<<31)-1;std::cout<<"2<<31-1 = "<<t<<"\n";
    t=(2<<32)-1;std::cout<<"2<<32-1 = "<<t<<"\n";
}


и выводит одинаковое число для 31 и 32,
2<<30-1 = 2147483647
2<<31-1 = 18446744073709551615
2<<32-1 = 18446744073709551615

slaxПостоялецwww2 ноя. 201710:17#1
    t=(2<<30)-1;printf("2<<30-1 = %I64u\n",t);
    t=(2<<31)-1;printf("2<<31-1 = %I64u\n",t);
    t=(2<<32)-1;printf("2<<32-1 = %I64u\n",t);
выводит

2<<30-1 =                                                      2147483647
2<<31-1 =                                                      4294967295
2<<32-1 =                                                      4294967295

Правка: 2 ноя. 2017 10:19

slaxПостоялецwww2 ноя. 201710:58#2
что-то странное после 29 смещения происходит
http://cpp.sh/3kky4
+ Показать
glasmПользовательwww2 ноя. 201711:08#3
вроде shell ограничен 32 битами, так что большие числа проще задавать как 0xffffffff - это аналог 2^32-1
slaxПостоялецwww2 ноя. 201711:33#4
glasm
даже если ?shell? щграничен 32 битами - это не объясняет почему выводится для  2<<30 = 18446744071562067968(2^64) хотя должно быть 2147483648(2^31)
glasmПользовательwww2 ноя. 201711:51#5
это так выглядит (-1) для uin64
ZabПостоялецwww2 ноя. 201713:30#6
Зачем ты в 64-битную переменную запихиваешь 32-битную константу? И еще удивляешься что она у тебя режется или знаковый бит размножается?
slaxПостоялецwww2 ноя. 201713:31#7
доехал
тут t=(2<<30)-1; двойка по-умолчанию int, каст помог
ВасянУчастникwww2 ноя. 201714:47#8
slax
> каст помог
Суффиксов в этот ваш C++ не завезли? Типа (2ULL << 30ULL) - 1ULL
nuke_birdНовичокwww2 ноя. 201716:24#9
Васян
> Суффиксов в этот ваш C++ не завезли? Типа (2ULL << 30ULL) - 1ULL
обижаешь)
http://en.cppreference.com/w/cpp/language/integer_literal

/ Форум / Программирование игр / Общее

2001—2017 © GameDev.ru — Разработка игр