关于数值运算的有关问题、请大家帮忙看看
关于数值运算的问题、请大家帮忙看看
在看代码的时候发现有这种运算
int a = 0;
a |= 0x0001;
.. .
a &= ~(0x0001);
.. .
a |= 0x0002;
.. .
a &= ~(0x0002);
.. .
a |= 0x0004;
.. .
a &= ~(0x0008);
.. .
a |= 0x0001;
.. .
a &= ~(0x0008);
.. .
请问他是想把a变成什么值、有经验的gg们是否能说说一般用于什么地方
谢谢
------解决方案--------------------
用于多个开关中例如C++的流文件
有
(读,写)
(追加,覆盖)
(如果没有就创建文件,如果没有就报错)
……好几对开关,每个开关理论上只要一个bit而byte是8各bit,为了整合用:
00000000
|||-(如果没有就创建文件,如果没有就报错)
||-(追加,覆盖)
|-(读,写)
用一个BYTE 保存N个开关
用时:
mode_reading = (10000000b)//用二进制明显
mode_writing = (00000000b)
mode_create = 00100000b
mode_nocreate = 00000000b
如果t & mode_reading == mode_reading 说明使用了mode_reading开关
------解决方案--------------------
这是置位操作的开关(Mask Value)
当你要把 第4位 置为 1 的时候,要写 a |= 0x0008
当你要把 第4位 置为 0 的时候,要写 a &= ~0x0008
呵呵,估计楼主所在的公司是写16位板子的公司。
在看代码的时候发现有这种运算
int a = 0;
a |= 0x0001;
.. .
a &= ~(0x0001);
.. .
a |= 0x0002;
.. .
a &= ~(0x0002);
.. .
a |= 0x0004;
.. .
a &= ~(0x0008);
.. .
a |= 0x0001;
.. .
a &= ~(0x0008);
.. .
请问他是想把a变成什么值、有经验的gg们是否能说说一般用于什么地方
谢谢
------解决方案--------------------
用于多个开关中例如C++的流文件
有
(读,写)
(追加,覆盖)
(如果没有就创建文件,如果没有就报错)
……好几对开关,每个开关理论上只要一个bit而byte是8各bit,为了整合用:
00000000
|||-(如果没有就创建文件,如果没有就报错)
||-(追加,覆盖)
|-(读,写)
用一个BYTE 保存N个开关
用时:
mode_reading = (10000000b)//用二进制明显
mode_writing = (00000000b)
mode_create = 00100000b
mode_nocreate = 00000000b
如果t & mode_reading == mode_reading 说明使用了mode_reading开关
------解决方案--------------------
这是置位操作的开关(Mask Value)
当你要把 第4位 置为 1 的时候,要写 a |= 0x0008
当你要把 第4位 置为 0 的时候,要写 a &= ~0x0008
呵呵,估计楼主所在的公司是写16位板子的公司。