在非16位的机器上是否有效

问题描述

| 我在一次采访中被问到这是不是16位机器上的有效声明吗? 以下是声明,
 unsigned int zero = 0;
 unsigned int compzero = 0xFFFF;
    

解决方法

        它们都是有效的声明,是的,因为没有语法错误。 但是,如果要获取
0
的补码(所有位都取反),则应使用:
unsigned int zero = 0;
unsigned int compzero = ~zero;
对于(例如)32位的
unsigned int
0xffff
~0
分别是:
0000 0000 0000 0000 1111 1111 1111 1111
1111 1111 1111 1111 1111 1111 1111 1111
    ,        是的,减速有效。以这种方式考虑,十六进制文字与十进制文字没有什么不同。如果他们希望将十六进制转换为十进制的结果为零,则可能不是这种情况(取决于使用的是哪个系统以及使用的是负数系统:1 \的补码,2 \的补码或简单的Not运算符)