ckv*_*ckv 73 c++ unsigned signed integer type-conversion
我很想知道如果我给无符号变量赋一个负值会发生什么.
代码看起来有点像这样.
unsigned int nVal = 0;
nVal = -5;
Run Code Online (Sandbox Code Playgroud)
它没有给我任何编译器错误.当我运行程序时,nVal
分配了一个奇怪的值!是否可以将某个2的补码值分配给nVal
?
Den*_*ose 60
正式答案 - 第4.7节conv.integral
"如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模2 n,其中
n
是用于表示无符号类型的位数).[注意:在二进制补码表示中,此转换是概念性的,并且位模式没有变化(如果没有截断).-end note]
这基本上意味着,如果在不是二的补(如符号量值,或一的补码)的方法,底层架构存储,转换为无符号必须表现得好像它是二进制补码.
Jas*_*eet 30
它将表示-5(以2的补码)表示的位模式分配给unsigned int.这将是一个很大的无符号值.对于32位整数,这将是2 ^ 32 - 5或4294967291
归档时间: |
|
查看次数: |
76089 次 |
最近记录: |