男士机械手表大全398元:一个C语言的问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/02 00:15:58
#define A 0x2
#define M (A << 28 | 0)
这第二个语句定义的M 到底是多少?

<<是位移符号
用来将一个数的各二进位全部左移若干位.例如: a=a<<2
将a的二进制数左移2位,右补0.若a=15,即二进制数00001111,左移2位得00111100,即乘了4.但此结论只适用于该数左 移时被溢出舍弃的高位中不包含1的情况.
例如,假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64时,左移一位时溢出的是0,而左移2位时,溢出的 高位中包含1.

说明:左移乘法运算快得多,有些C编译程序自动将乘2的运算用左移一位来实现,将乘2的n次方的运算处理为左移n位.

A << 28
向左移28为

|是按位与符号

参加运算的两个数据,按二进制位进行"或"运算.只要相应的二进位中有一个为1,则该位的结果值为1.即:
0&0=0; 0&1=1; 1&0=1; 1&1=1;

例如: 将八进制60与八进数17进行按位或运算(060|017).

00110000
(|) 00001111
-----------------
00111111

低4们全为1.如果想使一个数a的低4位改为1,只需将a与017进行按位或运算即可.

M (A << 28 | 0)
为0

是一个静态常量,在整个函数程序执行过程中,一直不会改变其值。

2的28次方,256M
|是按位或,所以|0没有意义

左移28位,实在windows下的32位编程吗?