私は を持ってunsigned
おり、それを に変換したいと思いますuint64_t
(可能であれば元に戻します)。
それ、どうやったら出来るの?可能であれば、未定義の動作に依存することは避けたいです。
ありがとう!
任意の整数型から符号なし整数型への変換は、標準によって完全に定義されています (セクション 6.3.1.3、パラグラフ 2)。値がターゲット型で表現できる場合は保持されます。それ以外の場合、値は modulo2^WIDTH
で縮小されWIDTH
ます。
例えば:
const uint64_t bigvalue = (uint64_t) 42u;
これは情報を失わないため、キャストが必要かどうかはわかりません。反対:
const unsigned int smallvalue = (unsigned int) bigvalue;
int
(おそらく、 <と仮定するとuint64_t
) より狭い型であるため、キャストが必要になります。
注: 弱い意味での「必要」を意味します。より狭い型に変換すると情報が失われるリスクがあるため、コンパイラが警告する可能性があります。キャストは、「自分が何をしているのか知っている」という感覚を追加します。これは、そのような警告が通常沈黙する方法です.
型キャストでそれを行うことができます:
uint64_t new = (uint64_t) old;
old
unsigned int はどこにありますか。
あなたは C ランドにいるので、キャストが唯一の方法です。単純に
uint64_t foo = (uint64_t)myVar;
または、逆に
unsigned int bar = (unsigned int)foo;
ただし、コンパイラは変換を自動的に取得する必要がありますが、uint64_t
->の場合は、unsigned int
切り捨てに関する警告が表示されます。また、64ビット環境でコンパイルしていない限り、値はもちろん元に戻すときに切り捨てられます。