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


相关文章
|
5月前
|
存储 C语言
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
341 1
|
1月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
16 0
|
2月前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
3月前
|
编译器 C语言
C语言函数的学习
掌握函数的使用是学习C语言的关键一环,理解和应用这些基本的函数概念将使你能够更有效地利用C语言的强大功能。
24 0
|
5月前
|
存储 程序员 Go
|
5月前
|
存储 编译器 C语言
c语言学习历程【1】
c语言学习历程【1】
68 1
|
5月前
|
C语言
C语言学习记录——枚举(定义、与结构体的区别、优点)
C语言学习记录——枚举(定义、与结构体的区别、优点)
59 3
|
5月前
|
C语言
C语言学习记录——通讯录(静态内存)
C语言学习记录——通讯录(静态内存)
32 2
|
5月前
|
存储 C语言
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
79 2
|
5月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
46 1