为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
潇潇雨雨 2019-07-06 17:47:44
如果我将负值赋值给一个无符号变量,会发生什么情况?我很想知道如果我将负值赋给一个无符号变量会发生什么。代码看起来有点像这样。unsigned int nVal = 0;nVal = -5;它没有给我任何编译器错误。当我运行程序时,nVal被分配了一个奇怪的值!会不会是某些2的补充值被分配给nVal?
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

正式答覆-第4.7节凸积分

“如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模2)。n哪里n用于表示无符号类型的位数)。[注意:在两个补码表示中,这种转换是概念性的,位模式没有变化(如果没有截断)。-尾注]

这在本质上意味着,如果底层体系结构存储在一个不是两个补码的方法中(比如符号大小或一个补码),那么向无符号结构的转换必须表现为它是两个补码。


查看完整回答
反对 回复 2019-07-06
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-07-06
?
湖上湖

TA贡献2003条经验 获得超2个赞

它将显示为最大无符号整数-4(值取决于计算机体系结构和编译器)值的正整数。

顺便说一句
您可以通过编写一个简单的C+“hello world”类型程序来检查这一点,然后自己查看


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 1986 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信