在C语言中,以下是什么意思?我明白,在我的第一行中,我有一个十六进制-字面意思,我不明白我的第二行在做什么。如果没有实际运行代码,我如何才能知道这段代码正在做什么?我正在准备一次考试,在那里我必须在纸上做这件事。
int aaa = 0x5c0000a3;
printf( "%08x %08x\n", (aaa >> 12), (aaa << 16) );
发布于 2018-10-06 16:42:46
在第二行:">>“表示向右移动,"<<”表示向左移动。因此,它将打印一个字符串到控制台,其值为aaa,向右移动12,然后向左移动16。
展开:将十六进制值转换为二进制,将每一点右移12,转换为带有8位位置的int。然后将所有位移到左侧16个位置,然后再进行转换。
发布于 2018-10-06 20:31:14
这些是位移位操作符或简单的移位算子。
现在你的代码
int aaa = 0x5c0000a3;
在二进制aaa
中,如下所示
1011100000000000000000010100011
在printf
中有两个表达式,第一个表达式(aaa >> 12)
向右移动12位,将12位从最左边填充到0,从而产生一个类似于
1011100000000000000
当转换为十六进制时,就会产生0x5C000
,对应的格式说明符是%08x
,它将从左侧填充零并将0005c000
打印到控制台。
当left shift
应用时也会发生类似的情况,其中aaa
向左移动,从右填充16零位。
https://stackoverflow.com/questions/52684492
复制