如果我将负值赋值给一个无符号变量,会发生什么情况?

如果我将负值赋值给一个无符号变量,会发生什么情况?

我很想知道如果我将负值赋给一个无符号变量会发生什么。

代码看起来有点像这样。

unsigned int nVal = 0;nVal = -5;

它没有给我任何编译器错误。当我运行程序时,nVal被分配了一个奇怪的值!会不会是某些2的补充值被分配给nVal?


潇潇雨雨
浏览 1987回答 3
3回答

米脂

正式答覆-第4.7节凸积分“如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模2)。n哪里n用于表示无符号类型的位数)。[注意:在两个补码表示中,这种转换是概念性的,位模式没有变化(如果没有截断)。-尾注]这在本质上意味着,如果底层体系结构存储在一个不是两个补码的方法中(比如符号大小或一个补码),那么向无符号结构的转换必须表现为它是两个补码。

慕田峪9158850

它将为无符号int分配表示-5(在2的补码中)的位模式。这将是一个很大的无符号值。对于32位INT,这将是2^32-5或4294967291。

湖上湖

它将显示为最大无符号整数-4(值取决于计算机体系结构和编译器)值的正整数。顺便说一句您可以通过编写一个简单的C+“hello world”类型程序来检查这一点,然后自己查看
打开App,查看更多内容
随时随地看视频慕课网APP