the*_*dal 5 c c++ struct bit-manipulation compilation
只是出于好奇.我想知道当左值小于指定值时会发生什么.
char a = 0xffffFFFF
Run Code Online (Sandbox Code Playgroud)
让我们说吧
struct {
int num:3;
}testStruct;
testStruct.num = 0xffffFFFF/2 -1;
Run Code Online (Sandbox Code Playgroud)
char(第一种情况)和3位整数(第二种情况)中的值是多少
您错误地使用了术语"左值".我猜你的意思是"变量"或"对象".
在case sizeof(0xFFFFFFFF) == 1和plain char中unsigned,则char a = 0xffffFFFF;很简单,因为该值可以表示为char.
在其他情况下,它是超出范围的转换.如果普通字符是无符号的,那么这意味着大的正数0xFFFFFFFF被模数调整UCHAR_MAX+1为适合(在普通系统上,普通字符得到255).
如果plain char被签名则它是实现定义的行为(并且在C中,可能引发实现定义的信号).最常见的实现定义是2的补码截断,它将赋予char值,-1但这不能保证.
移动到位域.0xffffFFFF/2 - 1是0x7FFFFFFE.这被分配给类型int和宽度的位域3,它请求超出范围的转换,就像签名的char情况一样.和以前一样,这是实现定义的(并且可能在C中引发实现定义的信号).
查看你的编译器文档,找出它在这里指定的内容,虽然我再次期望它会使用2的补码截断,给出-2.
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |