关于小端和大端的按位非运算符(〜在C中)

Fra*_*k V 4 c endianness bitwise-operators

这与家庭作业有关,但这不是家庭作业.

我有困难的理解,如果有就如何按位取反(差别~在C)将受到影响signed int,并unsigned int当大端机器上对小端机编译.

字节是否真的 "向后",如果是,那么按位(和其他运算符)会导致int根据机器类型产生不同的结果吗?

虽然我们在这里,对于C中的每个按位运算符,答案是否相同,或者它是否依赖于它?

我所指的运营商是:

~  /* bitwise Not */
&  /* bitwise And */
|  /* bitwise Or */
^  /* bitwise Exclusive-Or */
Run Code Online (Sandbox Code Playgroud)

先感谢您!

更新:到目前为止,在阅读我的回复时,我觉得有必要问一下bitwise not运算符是否会影响a上的符号位signed int.因为我忘记了所有那些狡猾的事情,所以我担心我在这方面有点困惑.亚当似乎在说所有的价值都被视为无符号.重新应用符号位还是一次签名的值变为无符号?

Ada*_*eld 7

按位运算符和逻辑运算符在大端和小端机器中的运行方式相同.同样,它们也在有符号和无符号数据上运行相同:结果就好像所有内容都是无符号的一样.因此,如果xy是有符号整数,那么~x等于(int)(~((unsigned int)x)x & y等于(int)(((unsigned int)x) & ((unsigned int)y),等等所有其他运算符.

  • 不,这些位将是相同的,但数值将被不同地解释.使用带符号的二进制补码整数,~n = -n-1.~4321 = -4322 (3认同)
  • 是的,在您通过指针算术/寻址游戏开始寻址整数的各个字节之前,字节顺序无关紧要.另外,所列出的运算符不受签名影响,但右移运算符`>>`可以. (2认同)