c语言位运算、a++、++a操作
2016-07-21 16:47
204 查看
位运算,就是对一个比特(Bit)位进行操作。8个比特构成一个字节(Byte)
C语言提供了六种位运算符:
运算符 & |
^ ~
<< >>
说明 按位与
按位或 按位异或
取反 左移 右移
按位与运算(&)
一个比特(Bit)位只有 0 和 1 两个取值,只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0。例如1&1为 1,0&0为 0,1&0也为 0,这和逻辑运算符&&非常类似。
按位或运算(|)
参与|运算的两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。例如1|1为1,0|0为0,1|0为1,这和逻辑运算中的||非常类似。
按位异或运算(^)
参与^运算两个二进制位不同时,结果为 1,相同时结果为 0。例如0^1为1,0^0为0,1^1为0。
取反运算(~)
取反运算符~为单目运算符,右结合性,作用是对参与运算的二进制位取反。例如~1为0,~0为1,这和逻辑运算中的!非常类似。
左移运算(<<)
左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0。
右移运算(>>)
右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1。
#include <stdio.h>
void bit_operation();
int main(){
int c;
int a=10;
c=a++;
printf("先赋值后运算\n");
printf("1、c=%d \n",c);
printf("2、a=%d \n",a);
a=10;
c=a--;
printf("2、c=%d \n",c);
printf("4、a=%d \n",a);
printf("先运算后赋值\n");
a=10;
c=++a;
printf("5、c=%d \n",c);
printf("6、a=%d \n",a);
a=10;
c=--a;
printf("7、c=%d \n",c);
printf("8、a=%d \n",a);
bit_operation();
}
//位运算
void bit_operation(){
unsigned int a = 60; /* 60 = 0011 1100 */
unsigned int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
printf("1、c=%d\n", c );
c = a | b; /* 61 = 0011 1101 */
printf("2、c=%d\n", c );
c = a ^ b; /* 49 = 0011 0001 */
printf("3、c=%d\n", c );
c = ~a; /*-61 = 1100 0011 */
printf("4、c=%d\n", c );
c = a << 2; /* 240 = 1111 0000 */
printf("5、c=%d\n", c );
c = a >> 2; /* 15 = 0000 1111 */
printf("6、c=%d\n", c );
}
结果:
C语言提供了六种位运算符:
运算符 & |
^ ~
<< >>
说明 按位与
按位或 按位异或
取反 左移 右移
按位与运算(&)
一个比特(Bit)位只有 0 和 1 两个取值,只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0。例如1&1为 1,0&0为 0,1&0也为 0,这和逻辑运算符&&非常类似。
按位或运算(|)
参与|运算的两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。例如1|1为1,0|0为0,1|0为1,这和逻辑运算中的||非常类似。
按位异或运算(^)
参与^运算两个二进制位不同时,结果为 1,相同时结果为 0。例如0^1为1,0^0为0,1^1为0。
取反运算(~)
取反运算符~为单目运算符,右结合性,作用是对参与运算的二进制位取反。例如~1为0,~0为1,这和逻辑运算中的!非常类似。
左移运算(<<)
左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0。
右移运算(>>)
右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1。
#include <stdio.h>
void bit_operation();
int main(){
int c;
int a=10;
c=a++;
printf("先赋值后运算\n");
printf("1、c=%d \n",c);
printf("2、a=%d \n",a);
a=10;
c=a--;
printf("2、c=%d \n",c);
printf("4、a=%d \n",a);
printf("先运算后赋值\n");
a=10;
c=++a;
printf("5、c=%d \n",c);
printf("6、a=%d \n",a);
a=10;
c=--a;
printf("7、c=%d \n",c);
printf("8、a=%d \n",a);
bit_operation();
}
//位运算
void bit_operation(){
unsigned int a = 60; /* 60 = 0011 1100 */
unsigned int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
printf("1、c=%d\n", c );
c = a | b; /* 61 = 0011 1101 */
printf("2、c=%d\n", c );
c = a ^ b; /* 49 = 0011 0001 */
printf("3、c=%d\n", c );
c = ~a; /*-61 = 1100 0011 */
printf("4、c=%d\n", c );
c = a << 2; /* 240 = 1111 0000 */
printf("5、c=%d\n", c );
c = a >> 2; /* 15 = 0000 1111 */
printf("6、c=%d\n", c );
}
结果:
先赋值后运算 1、c=10 2、a=11 2、c=10 4、a=9 先运算后赋值 5、c=11 6、a=11 7、c=9 8、a=9 位运算: 1、c=12 2、c=61 3、c=49 4、c=-61 5、c=240 6、c=15 Press any key to continue
相关文章推荐
- C语言中的面向对象思想
- C语言开发环境搭建
- 精通C++资源管理-在资源管理类中小心coping行为
- 猜拳游戏
- UVA 10106-Product
- atoi函数实现
- C++ hdoj 2009
- cout 未定义
- c++学习笔记(九):C++日期和时间
- 解决 multiple definition of 问题
- C语言 函数小总结
- 解读 C 语言中的指针
- C++ exe 传参
- c++学习笔记(八):C++字符串
- C/C++的内存泄漏检测工具Valgrind memcheck的使用经历
- C++ STL容器迭代器失效
- C++语法——static关键字
- 1084. Broken Keyboard (20)
- C/C++中函数传参方式简述
- 创建一个简单的VC++ Socket程序