问题描述
|
我在一次采访中被问到这是不是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运算符)