它是否适用于非16位的机器

Ami*_*mar 1 c

我在接受采访时被问过,这台机器上的有效声明是不是16位?

以下是声明,

 unsigned int zero = 0;
 unsigned int compzero = 0xFFFF;
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 8

它们都是有效的声明,是的,因为没有语法错误.

但是,如果您的目的是获得0(所有位反转)的补充,您应该使用:

unsigned int zero = 0;
unsigned int compzero = ~zero;
Run Code Online (Sandbox Code Playgroud)

与(例如)一个32位的unsigned int,0xffff并且~0分别为:

0000 0000 0000 0000 1111 1111 1111 1111
1111 1111 1111 1111 1111 1111 1111 1111
Run Code Online (Sandbox Code Playgroud)

  • 为了安全起见,请注意`〜zero`不能替换为`~0`,而是必须用`~0u`替换,以获得相等.(也就是签名与未签名事项!) (3认同)