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 个零零位。
下面的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 个零零位。