基本运算符 †
位操作符 †位操作就是直接对整数在内存中的二进制位进行操作。 尽量避免对未知的有符号数执行位操作 &(与) †位与运算符(&):如果两个操作数中的某位都为1,那么结果值便为1,否则,改为便是0; int x = 0x96; // 1001 0110 int y = 0x93; // 1001 0011 int z = x & y;// 1001 0010 |(或) †位或运算符( | ):如果两个操作数的某位中某一位为1,那么结果该位就为1; int x = 0x96; // 1001 0110 int y = 0x93; // 1001 0011 int z = x | y;// 1001 0111 ^(异或) †位异或运算符(^):仅在两个操作数的对应位中只有一位设为1的时候,结果为才为1. int x = 0x96; // 1001 0110 int y = 0x93; // 1001 0011 int z = x ^ y;// 0000 0101 ~(取反) †位反运算符(~):将操作数中的每一位取反,将1转换为0或将0转换为1 int x = 0x96; // 1001 0110 int y = ~x; // 0110 1001 >>(右移) †在右移中合理地选择 0 或符号位来填充空出的位 在右移运算中,空出的位用 0 还是符号位进行填充呢? 其实答案由具体的 C 语言编译器实现来决定。在通常情况下,如果要进行移位的操作数是无符号类型的,那么空出的位将用 0 进行填充;如果要进行移位的操作数是有符号类型的,则 C 语言编译器实现既可选择 0 来进行填充,也可选择符号位进行填充。 因此,如果很关心一个右移运算中的空位,那么可以使用 unsigned 修饰符来声明变量,这样空位都会被设置为 0。同时,如果一个程序采用了有符号数的右移位操作,那么它就是不可移植的。 int x = 0x96; // 1001 0110 int y = x>>3; // 0001 0010 <<(左移) †通过将一个位组合中的所有位向左或者向右移动指定数量的位形成新值。对于左移运算符,空出的位设为0,对于右移运算符,如果是无符号类型,则空出的位为0,对于有符号的值,正数空出来的值填0,负数则填1. int x = 0x96; // 1001 0110 int y = x<<3; // 1011 0000 其他运算符 †sizeof #include<stdio.h> int main() { int n=0; int intsize = sizeof(int); printf("int sizeof is %d bytes\n",intsize); return 0; } 在32位操作系统下,运行结果如下: int sizeof is 4 bytes フレッツ光が月額556円~【GMOとくとくBB】 コメント: |