C语言学习——位运算

简介: C语言学习——位运算

原码反码补码介绍


原码 就是前面所介绍的二进制定点表示法,即最高位为符号位,“ 0 ”表示正,“ 1 ”表示负,其余位表示数值的大小。


反码 表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。


补码 表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加 1 。


补码详细介绍


补码是为了表示一个负数的二进制形式。


其转化方式是,先将负数当成正数,转化成二进制的形式,再将二进制正数的各个位上取反,再加上一。


例如-5


先求出5的二进制数 : 0000 0000 0101


然后将各个位上0变1,1变0 : 1111 1111 1010


最后再加1 : 1111 1111 1011


按位与(&)


运算的两个数,转换算为二进制后,进行与(&)运算。


当相应位上的数都是1时,该位取1,否则该为0。


例如5 & -5


5 : 0000 0000 0101


-5 :1111 1111 1011


答案 : 0000 0000 0001


按位或(|)


运算的两个数,转换为二进制后,进行或(|)运算。


只要相应位上存在1,那么该位就取1,如果都不为1,就为0。


还是5 | -5


0000 0000 0101


1111 1111 1011


可以看到每一位中其中一个都有1


答案 :1111 1111 1111


按位异或(^)


运算的两个数,转换成二进制数后,进行异或(^)运算


如果相应位置上的数相同,该位取0,如果不同改位取1。


5 ^ -5


0000 0000 0101


1111 1111 1011


答案: 1111 1111 1110


同时任何数异或0都是其本身,一个数如果异或自己则等于0


这样我们可以用异或来交换两个数的值


比如交换x,y的值


x ^= y; x = x ^ y


y ^= x; y = y ^ x ^ y


x ^= y; x = ( x ^ y ) ^ (y ^ x ^ y) ; --------- //最后一步 x ^= y 时 x = x ^ y; y = y ^ x ^ y



左移(<<)


将一个数二进制下的数向左移若干位,


比如 x << y 就是将二进制下的x 向左移 y 位


例 : 5 << 5


5 : 0000 0000 0101


5 << 5 : 0000 1010 0000


在10进制下就等于160


我们可以思考一下,在十进制中,一个数每乘一次10就向左进一位。


那么在二进制中,同10进制一样,二进制中每乘一次2就向左进一位,

那么一个数左移x 就等价于一个数乘 2x。


右移(>>)


将一个数在二进制下右移若干位


与左移用法相同


例 5 >> 2


5:0000 0000 0101


5 >> 2 : 0000 0000 0001


十进制下等于1


这里与左移类似,十进制下每除10整数位就退一位


那么右移就等价于除了几次2


同时右移运算是向下取整的


取反(~)


其实在说补码的时候,取反就已经说了,就是将取反的数在二进制下的每一位取相反的数


5 : 0000 0000 0101


~5 : 1111 1111 1010


相关文章
|
1月前
|
算法 程序员 C语言
C语言位运算
C语言位运算
21 0
|
1月前
|
存储 编译器 C语言
初识C语言——详细入门(系统性学习day4)
初识C语言——详细入门(系统性学习day4)
|
1月前
|
编译器 程序员 开发工具
c语言从入门到实战——在系统学习C语言之前所需要了解的知识
C语言是一种通用的、过程式的计算机编程语言,支持结构化编程、词汇变量作用域和递归等功能,其设计提供了低级别的存取权限,并且要求程序员管理所有的内存细节。C语言的基本构成包括数据类型(如整型、浮点型、字符型等)、运算符(如算术运算符、关系运算符、逻辑运算符等)、控制结构(如顺序结构、选择结构、循环结构等)以及函数等。此外,C语言还提供了指针的概念,这是其他许多编程语言所不具备的。指针是一个变量,其值为另一个变量的地址,通过指针可以间接访问和操作内存中的数据。C语言也支持数组、结构体、联合体等复合数据类型,以及文件操作、动态内存分配等高级功能。
51 0
|
1月前
|
存储 C语言
通俗易懂的学习C语言中输入一组数并找出其最大值
通俗易懂的学习C语言中输入一组数并找出其最大值
|
4月前
|
程序员 编译器 人机交互
深入学习《c语言函数》
深入学习《c语言函数》
43 0
|
4月前
|
编译器 C语言
你的函数使用对了吗?-------C语言函数学习(3)详解
你的函数使用对了吗?-------C语言函数学习(3)详解
50 1
|
4月前
|
算法 C语言
你会使用函数的递归和迭代吗?----------C语言函数学习(4)详解
你会使用函数的递归和迭代吗?----------C语言函数学习(4)详解
76 1
|
1月前
|
机器学习/深度学习 人工智能 Java
学习Python语言好还是C语言好
学习Python语言好还是C语言好
21 0
|
1月前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
72 0
|
1月前
|
C语言
二次学习C语言补缺(day1)
二次学习C语言补缺(day1)
17 2