惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Hacker News
The Hacker News
F
Full Disclosure
Cloudbric
Cloudbric
Blog — PlanetScale
Blog — PlanetScale
W
WeLiveSecurity
N
News and Events Feed by Topic
T
Troy Hunt's Blog
V2EX - 技术
V2EX - 技术
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
B
Blog
GbyAI
GbyAI
C
Check Point Blog
B
Blog RSS Feed
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Recorded Future
Recorded Future
The Last Watchdog
The Last Watchdog
N
News and Events Feed by Topic
T
The Blog of Author Tim Ferriss
O
OpenAI News
V
V2EX
人人都是产品经理
人人都是产品经理
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
WordPress大学
WordPress大学
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Security @ Cisco Blogs
C
Cisco Blogs
Security Latest
Security Latest
S
Security Affairs
V
Visual Studio Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
Last Week in AI
Last Week in AI
AWS News Blog
AWS News Blog
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
PCI Perspectives
PCI Perspectives
博客园_首页
U
Unit 42
Google DeepMind News
Google DeepMind News
Hugging Face - Blog
Hugging Face - Blog
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
The Register - Security
The Register - Security
N
Netflix TechBlog - Medium
L
LINUX DO - 热门话题
H
Hacker News: Front Page

博客园 - arvin2012

VC++常用方法函数集合, EVC++4.0 长用数据类型转换,FFT算法 指向函数的指针数组到底该怎么用 内存耗尽怎么办? 异步Socket通信总结 贵在坚持 vc++操作word MFC中的ClassWizard的使用 追MM与设计模式的有趣见解 动软.Net代码生成器 发布最新2.12版 vc中常用的方法 vc中读写注册表 c++ file and directory 删除,移动,目录浏览对话框,找某目录下的所有文件(包括子目录) 简单好用的读写ini文件的类 Windows API 技巧集 vc 使用总结 VC 常见的108个问题 VC中动态生成控件 什么是COM,如何使用COM
位运算符的一些简单应用
arvin2012 · 2008-12-22 · via 博客园 - arvin2012

位运算符有:&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。
优先级从高到低,依次为~、&、^、|,

位运算符的一些简单应用:
按位与运算有两种典型用法,一是取一个位串信息的某几位,如以下代码截取x的最低7位:x & 0177。二是让某变量保留某几位,其余位置0,如以下代码让x只保留最低6位:x = x & 077。

按位或运算的典型用法是将一个位串信息的某几位置成1。如将要获得最右4为1,其他位与变量j的其他位相同,可用逻辑或运算017|j

按位异或运算的典型用法是求一个位串信息的某几位信息的反。如欲求整型变量j的最右4位信息的反,用逻辑异或运算017^j,就能求得j最右4位的信息的反,即原来为1的位,结果是0,原来为0的位,结果是1。 交换两个值,不用临时变量,假如a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:
a=a^b;  b=b^a;     a=a^b;

取反运算常用来生成与系统实现无关的常数。如要将变量x最低6位置成0,其余位不变,可用代码x = x & ~077实现。以上代码与整数x用2个字节还是用4个字节实现无关。
当两个长度不同的数据进行位运算时(例如long型数据与int型数据),将两个运算分量的右端对齐进行位运算。如果短的数为正数,高位用0补满;如果短的数为负数,高位用1补满。如果短的为无符号整数,则高位总是用0补满。

位运算用来对位串信息进行运算,得到位串信息结果。如以下代码能取下整型变量k的位串信息的最右边为1的信息位:((k-1)^k) & k。

对于带符号的数据,如果移位前符号位为0(正数),则左端也是用0补充;如果移位前符号位为1(负数),则左端用0或用1补充,取决于计算机系统。对于负数右移,称用0 补充的系统为“逻辑右移”,用1补充的系统为“算术右移”。以下代码能说明读者上机的系统所采用的右移方法:
     printf("%d\n\n\n", -2>>4);
若输出结果为-1,是采用算术右移;输出结果为一个大整数,则为逻辑右移。

移位运算与位运算结合能实现许多与位串运算有关的复杂计算。设变量的位自右至左顺序编号,自0位至15位,有关指定位的表达式是不超过15的正整数。以下各代码分别有它们右边注释所示的意义:
   (1) 判断int型变量a是奇数还是偶数,尤其是对大数的判断
        a&1 == 0 偶数
        a&1 == 1 奇数
    (2) 取int型变量a的第k位 (k=0,1,2……sizeof(int))
 a>>k&1
    (3) 将int型变量a的第k位清0
 a=a&~(1<<k)
    (4) 将int型变量a的第k位置1
 a=a|(1<<k)
    (5) int型变量循环左移k次
 a=a<<k|a>>16-k   (设sizeof(int)=16)
    (6) int型变量a循环右移k次
 a=a>>k|a<<16-k   (设sizeof(int)=16)
    (7) 实现最低n位为1,其余位为0的位串信息:
 ~(~0 << n)
    (8)截取变量x自p位开始的右边n位的信息:
 (x >> (1+p-n)) & ~(~0 << n) 
    (9)截取old变量第row位,并将该位信息装配到变量new的第15-k位
 new |= ((old >> row) & 1) << (15 – k)
    (10)设s不等于全0,代码寻找最右边为1的位的序号j:
 for(j = 0; ((1 << j) & s) == 0; j++) ;