我在C中有一个类似的代码:
int main(){
unsigned char var1;
var1 = 255;
var1 = var1 + 1;
printf("The result is = %i", var1);
}
Run Code Online (Sandbox Code Playgroud)
我认为它会溢出,因为var1的最大类型最多为255,因此当你将它增加到1时,它将是256但结果为0.
但是,当我修改代码时,这样:
int main(){
unsigned char var1;
var1 = 255+ 1;
printf("The result is = %i", var1);
}
Run Code Online (Sandbox Code Playgroud)
结果会出现溢出错误,例如"警告:从'int'到'unsigned char'的无符号转换将值从'256'更改为'0'[-Woverflow]".
为什么第一个代码没有溢出?
无符号字符(基本上是一个字节)的环绕是设计的.
然而,你的第二个例子是增加两个整数.将int中的256转换为字节中的零会构成信息丢失; 因此警告.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |