1

私は を持ってunsignedおり、それを に変換したいと思いますuint64_t(可能であれば元に戻します)。

それ、どうやったら出来るの?可能であれば、未定義の動作に依存することは避けたいです。

ありがとう!

4

4 に答える 4

6

任意の整数型から符号なし整数型への変換は、標準によって完全に定義されています (セクション 6.3.1.3、パラグラフ 2)。値がターゲット型で表現できる場合は保持されます。それ以外の場合、値は modulo2^WIDTHで縮小されWIDTHます。

于 2012-09-27T14:34:45.987 に答える
2

例えば:

const uint64_t bigvalue = (uint64_t) 42u;

これは情報を失わないため、キャストが必要かどうかはわかりません。反対:

const unsigned int smallvalue = (unsigned int) bigvalue;

int(おそらく、 <と仮定するとuint64_t) より狭い型であるため、キャストが必要になります。

注: 弱い意味での「必要」を意味します。より狭い型に変換すると情報が失われるリスクがあるため、コンパイラが警告する可能性があります。キャストは、「自分が何をしているのか知っている」という感覚を追加します。これは、そのような警告が通常沈黙する方法です.

于 2012-09-27T14:34:16.633 に答える
0

型キャストでそれを行うことができます:

uint64_t new = (uint64_t) old;

oldunsigned int はどこにありますか。

于 2012-09-27T14:35:12.903 に答える
-1

あなたは C ランドにいるので、キャストが唯一の方法です。単純に

uint64_t foo = (uint64_t)myVar;

または、逆に

unsigned int bar = (unsigned int)foo;

ただし、コンパイラは変換を自動的に取得する必要がありますが、uint64_t->の場合は、unsigned int切り捨てに関する警告が表示されます。また、64ビット環境でコンパイルしていない限り、値はもちろん元に戻すときに切り捨てられます。

于 2012-09-27T14:34:15.597 に答える