我目前正在阅读《C程序设计语言》(K&R)的第二章,并学习位运算。
这是引起我的好奇心的例子:
x = x & ~077
假设字长为16位,长整型为32位,我认为将077转换为以下内容:
0000 0000 0011 1111 (16 bit signed int).
这将被补充为:
1111 1111 1100 0000.
我的问题是,对于不同可能的x类型,下一步会发生什么?如果x是有符号整数,则答案很简单。但是,如果x是带符号长整型,我认为~077将变为:
1111 1111 1111 1111 1111 1111 1100 0000
使用2的补码来保留符号。这样做正确吗?
另外,如果x是一个无符号长整型,那么~077会变成什么:
0000 0000 0000 0000 1111 1111 1100 0000
或者,是否先将~077转换为有符号长整型:
1111 1111 1111 1111 1111 1111 1100 0000
在此之后,它会被转换为无符号长整型(位数没有变化)吗?
任何帮助都可以帮助我澄清这个操作是否总是只将最后6位设置为零。