漫漫考研路之C语言的位运算
来源:互联网 发布:php程序员简历项目经验 编辑:程序博客网 时间:2024/06/05 00:47
背景:感觉好久没有好好的写点关于计算机的东西了,最近一直在学习考研的内容,和计算机挂着四分之一的边,数据结构导论是之前自考考试考的内容,C语言和自考中的C++相似,只是程序多了一点,所以复习起来还是比较顺手的,C语言中有一章节的位运算,虽然篇幅比较短小,只有薄薄的五张纸,却蕴含了丰富多彩的内容,下面我来具体的介绍一下吧。
一、定义
位运算是指进行二进制的运算。
二、分类
说明:
(1)位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。
(2)运算量只能是整型或字符型的数据,不能位实型数据。
1、“按位与”运算符(&)
如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。即:
0&0=0,0&1=0,1&0=0,1&1=1
注意:如果参加&运算的是负数,则以补码形式表示为二进制数,然后按位进行“与”运算。
2、“按位或”运算符(|)
两个相应的二进制为中只要有一个为1,该位的结果值为1。即:
0|0=0,0|1=1,1|0=1,1|1=1
3、“异或”运算符(^)
异或运算符^也称XOR运算符。它的规则是:若参加运算的两个二进制为同号,则结果为0(假);异号则为1(真)。即:
0^0=0,0^1=1,1^0=1,1^1=0
“异或”的意思是判断两个相应的位值是否为“异”,为“异”(值不同)就取真(1),否则为假(0)。
应用:
(1)使特定位翻转
(2)与0相^,保留原值
(3)交换两个值,不用临时变量
4、“取反”运算符(~)
~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。
注意:~运算符的优先级别比算数运算符、关系运算符、逻辑运算符和其他位运算符都高,例如,~a&b,先进行~a运算,然后进行&运算。
5、左移运算符(<<)
用来将一个数的各二进制位全部左移若干位。例如:a=a<<2,将a的二进制数左移2位,右补0。高位左移后溢出,舍弃。
左移一位相当于该数乘以2,左移两位相当于该数乘以2的2次方。
6、右移运算符(>>)
用来将一个数的各二进制位全部右移若干位。例如:a=a>>2,将a的二进制数右移2位,移到右端的低位被舍弃,对无符号数,高位补0.
右移一位相当于除以2,右移n位相当于除以2的n次方。
注意:右移的时候,注意符号位问题。对于无符号位数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0。如果符号位原来为1(即负数),则左边移入0还是1,取决于所用的计算机系统。有的系统移入0,有的系统移入1.移入0的称为“逻辑右移”,即简单右移;移入1的称为“算数右移”。
三、注意问题
如果两个数据长度不同(例如long型和int型)进行位运算时(如a&b,而a为long型,b为int型),系统会将二者按右端对齐。如果b为正数,则左侧16为补满0;若b为负数,左端应补满1,如果b为无符号整数型,则左侧填满0.
四、学习心得
1、在电脑的世界里只有0和1,大道至简。
2、不使用中间变量都能交换两个数的值,太牛了!
- 漫漫考研路之C语言的位运算
- C语言之位运算
- C语言之位运算
- C语言之位运算
- C语言之位运算
- c语言之位运算
- 漫漫考研路之考后总结
- C语言的位运算
- c语言的位运算
- C语言的位运算
- 漫漫考研路
- 漫漫考研路
- 漫漫考研路
- #漫漫考研路#
- 【学习ios之路:C语言】进制.位运算.栈
- C语言修行之位运算
- c语言特色之位运算
- C语言位运算之异或 ^
- QT之样式styleSheet
- Spring与Struts2整合
- 468. Validate IP Address
- Huffman树的创建
- Android studio编程时出现的错误:unspecified on project app resolves to an APK archive which is not supported
- 漫漫考研路之C语言的位运算
- JDBC配置文件以及数据库中那些增删改查
- 20161210
- 有关的进程概念
- Chapter 14: Combining Models
- 数据结构实验之排序五:归并求逆序数(讲解归并排序算法)
- Ubuntu 16.04 自学之 JDK
- layer 实现弹窗提交信息
- Facebook登录申请流程