C 中零的中间整数

zero's inbetween int literal in C

下面的C语言是什么意思? 我明白,在我的第一行我有一个十六进制文字 我真的不明白我的第二行在做什么。实际上没有 运行 代码,我怎么能找出这段代码在做什么?我正在为考试而学习,我必须在纸上做这个。

int aaa = 0x5c0000a3;
printf( "%08x %08x\n", (aaa >> 12), (aaa << 16) ); 

第二行: “>>”表示向右移位,“<<”表示向左移位。 所以它将向控制台打印一个字符串,其中 aaa 的值向右移动 12,然后向左移动 16。

展开:将十六进制值转为二进制,每位右移12,转为8位整型。 然后将所有位左移16位再转换

这些是位移运算符或简单地 shift-operators

  • 右移 (>>)
  • 左移 (<<)

现在你的代码

int aaa = 0x5c0000a3;

二进制 aaa 看起来像这样

1011100000000000000000010100011

printf 中有两个表达式,第一个表达式 (aaa >> 12) 向右移动 12 位,从最左侧填充 12 位到零,得到一个二进制值,如

1011100000000000000

当转换为十六进制时将导致 0x5C000,对应的格式说明符是 %08x,它将从左侧填充零并将 0005c000 打印到控制台 [=22] =]

应用 left shift 时会发生类似的事情,其中​​ aaa 向左移动,同时从右侧填充 16 个零零位。