Цель приведения -1 к уинт32? - PullRequest
3 голосов
/ 29 января 2012

Это, вероятно, очень глупый вопрос для опытных разработчиков C ++, но какова цель преобразования -1 в uint32? Я переводил программу с C ++ на C #, и во многих случаях я вижу что-то вроде этого:

static const uint32 AllTypes = static_cast<uint32>(-1);

Что именно это делает? Как это можно сделать в C #?

Ответы [ 3 ]

4 голосов
/ 29 января 2012

В системах, использующих дополнение до двух, приведение -1 к unsigned дает наибольшее значение, которое может представлять число без знака.

В C # вы можете использовать unchecked((UInt32)-1) или лучше: UInt32.MaxValue.Это хорошо определенное поведение, которое работает на всех архитектурах ЦП.

Согласно поток связал , приведя -1 к беззнаковым результатам, все биты установлены на всех архитектурах в C ++.

2 голосов
/ 29 января 2012

Как это можно сделать в C #

uint AllTypes = uint.MaxValue;
1 голос
/ 29 января 2012

Я предполагаю, что раньше все биты были равны 1. Полезно, когда мы используем помеченные данные. Вероятно, каждому элементарному типу дается немного, а «сложные» типы (например, массивы) имеют свои.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...