C 位操作
来源:互联网 发布:社交网络 肖恩帕克 编辑:程序博客网 时间:2024/06/10 13:05
二进制数/位/字节
二进制整数
一个字节通常包括8个位。可以将这8位从左到右看作是从7到0。在字节中,位7称为高位(high-order bit),位0称为低位(low-order bit)。每位数字对应2的特定的指数。
一个字节可以存储的数的范围是0到255,总共256个可能的值。通过改变对位模式的解释方式,一个字节可以存储从-128到+127之间的整数,总共还是256个可能的值。
有符号整数
二进制补码-使用最后7位表示从-到127的值,同时高位设置为0。如果高位为1,那么该值为负。
10000000 = -12810000001 = -12700000000 = 000000001 = 1
二进制反码-反转位组合中的每一位以形成一个数的负数。
基数
八进制
八进制(octal)指以8为基数的数制系统。该系统使用8的幂。了解八进制的简单方法是每个八进制位对应3个二进制位
十六进制
十六进制(hex)指以16为基数的数制系统。该系统使用16的幂,使用的数字是0到15(0-10-ABCEF)。每个十六进制位对应于一个4位的二进制数。因此两个十六进制恰好对应一个8位字符。第一个十六进制表示高4位,第二个十六进制表示低4位。
0XA3F = 26230XC2 = 11000010
C的位运算符
掩码
“位与”运算符通常跟掩码一起使用。掩码是某些位设置开(1)而某些为设置为关(0)的位组合。
#deinfe MASK 2flags = flags & MASK;
这个语句将导致flags的位除1之外的所有位都被设置位0,原因是它任何位使用&运算符与0组合都得0;
因为掩码中的零覆盖了flags中相应的位,所以该过程成为“使用掩码”。
一种常见的C用法如下面语句所示:
ch &= 0XFF
值0xFF的二进制形式为11111111,十进制的形式为0377。该掩码留下ch的最后8位,将其余位设为0。无论最初的ch是8位/16位或是更多,都将最终修正到一个字节中。
打开位
有时需要打开一个值中特定的位,同时保持其他位不变。下面的语句将flags中的位1设置为1,并保留其他所有位不变。
flags = flags | MASK
这是因为任何使用|运算符与0相结合结果位该位本身。
关闭位
在不影响其他位的情况下,同时能将特定的位关闭与能够将特定的位打开是一样有用的。假设相关闭flags中的位1。MASK仍然只有位1是打开的。可以这样做:
flags = flags & ~MASK;
转置位
一个位表示如果该位打开,则关闭该位;如果该位关闭,则打开该位。
flags = flags ^ MASK;
查看一位的值
假设查看一位的值。例如,flag的位1是否为1?不应该这样使用:
if ( flag == MASK) {}
flag中的其他位会使比较结果为真。必须屏蔽flag中的其他位(使用掩码),以便只把flag中的位1和MASK像比较。
if ((flag & MASK) == MASK){}
总结
每个二进制数字表示1位,每个八进制数字表示3位,每个十六进制数字表示4位。这种转化关系使二进制数字转化位八进制或十六进制变得相对简单。
位反运算符(~)–将其操作数中每一位取反,将1转换位0。
位与运算符(&)–用两个操作数形成一个值。如果两个操作数中某位都为1,那么结果值中对应位设为1.否则,该位设为0.
位或操作符(|)–用两个操作数形成一个值。如果两个操作数中的某位中有一位为1,那么结果值中的对应位设为1;否则,该位设为0.
位异或(^) – 尽在两个操作数的对应位中只有一位设为1时,结果为才设为1。
- C的位操作
- C语言 位操作
- C 位操作
- c++(位操作符)
- C语言位操作
- C-位操作
- C语言位操作
- C/C++位操作
- C 位操作 详解
- C语言位操作
- C语言位操作
- C语言位操作
- C 位操作
- C 位操作
- c语言位操作
- C语言位操作
- c语言位操作
- C语言-位操作
- C语言之main函数
- (Caffe,LeNet)权值更新(七)
- jQuery删除和清空节点
- Android SQLite的基本操作
- POJ-1837 Balance
- C 位操作
- C#字节数组操作
- Java#Servlet规范#HTTP Protocol Parameters
- 进程处理例子
- HIVE入门
- picasso的简单用法
- 为什么在项目中使用Using namespace CocosDenshion;会提示出错expected namespace namespace
- 背景建模--高斯混合模型
- Picasso入门教程(九)回调,remoteViews,通知