【学习笔记】【C语言】位运算
1. & 按位与
1> 功能
只有对应的两个二进位均为1时,结果位才为1,否则为0。
2> 举例: 比如9&5,其实就是1001&101=1,因此9&5=1
3> 规律
二进制中,与1相&就保持原位,与0相&就为0
2. | 按位或
1> 功能
只要对应的二个二进位有一个为1时,结果位就为1,否则为0。
2> 举例: 比如9|5,其实就是1001|101=1101,因此9|5=13
3. ^ 按位异或
1> 功能
当对应的二进位相异(不相同)时,结果为1,否则为0。
2> 举例: 比如9^5,其实就是1001^101=1100,因此9^5=12
3> 规律
相同整数相^的结果是0。比如5^5=0
多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6
因此得出结论:a^b^a = b
4. ~ 取反
对整数a的各二进位进行取反,符号位也取反(0变1,1变0)
5. << 左移
把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方
由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性
6. >> 右移
把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方
为正数时, 符号位为0,最高位补0
为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定
7.学习代码
#include <stdio.h> int main()
{
/* 按位与 & 10101010000
00000100000
-------------
00000000000 10111011
10101101
---------
10101001 1001
0101
-----
0001
*/ /*
按位或 |
1001
0101
-----
1101
*/ /*
按位异或 ^
1.相同数值进行异或,结果肯定是0,比如9^9
2.交换 9^5^6 == 9^6^5
3.任何数值跟0进行异或,结果还是原来的数值,9^0 == 9
4.a^b^a == a^a^b == 0^b == b 1001
0101
-----
1100 1001
1001
-----
00000 0101
0000
----
0101 9^5^9 == 9^9^5 = 0^5 = 5 a^b^a == b
*/
//printf("%d\n", 9^9); //printf("%d\n", 9 ^ 5); /*
按位取反 ~
~0000 0000 0000 0000 0000 0000 0000 1001
1111 1111 1111 1111 1111 1111 1111 0110
*/
//printf("%d\n", ~9); /*
左移 << 0000 0000 0000 0000 0000 0000 0000 0000
00 0000 0000 0000 0000 0000 0000 100100 9<<1 -> 9 * 2的1次方 == 18
9<<2 -> 9 * 2的2次方 ==36
9<<n -> 9 * 2的n次方
*/ //printf("%d\n", 9<<1); /*
右移 >>
0000 0000 0000 0000 0000 0000 0000 0000
000000 0000 0000 0000 0000 0000 0000 10
111111 1111 1111 1111 1111 1111 1111 10 8>>1 -> 8/2 == 4
8>>2 -> 8/2的2次方 == 2
8>>n -> 8/2的n次方
*/ printf("%d\n", >>); return ;
}
#include <stdio.h> /*
使用位异或运算符交换两个变量的值
*/ int main()
{
int a = ;
int b = ; /* 借助第三方变量
int temp = a;
a = b;
b = temp;
*/ /*
a = b - a;
b = b - a;
a = b + a;
*/ // a^b^a == b // a --> 10^11
// b --> 10
a = a ^ b;
b = a ^ b;
a = a ^ b; printf("a=%d, b=%d\n", a, b); return ;
}
#include <stdio.h>
/*
用位与&运算符判断变量的奇偶性
*/
int main()
{
/*
15: 1111
9: 1001 14: 1110
10: 1010
*/
int a = ; a& == // 奇数
a& == // 偶数 /*
if (a%2) {
printf("奇数\n");
} else {
printf("偶数\n");
}*/ //a%2==0?printf("偶数\n"):printf("奇数\n"); //a%2?printf("奇数\n"):printf("偶数\n"); return ;
}
/*
写一个函数,用来输出整数在内存中的二进制形式
*/ #include <stdio.h>
void printBinary(int number); int main()
{
/*
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 1111 9 : 0000 0000 0000 0000 0000 0000 0000 1001
-10 : 1111 1111 1111 1111 1111 1111 1111 0110
*/ //printf("%d\n", ~9); printBinary(-);
return ;
} void printBinary(int number)
{ // 记录现在挪到第几位
// (sizeof(number)*8) - 1 == 31
int temp = ( sizeof(number)<< ) - ; while ( temp >= )
{
// 先挪位,再&1,取出对应位的值
int value = (number>>temp) & ;
printf("%d", value); //
temp--; // 每输出4位,就输出一个空格
if ( (temp + ) % == )
{
printf(" ");
}
} printf("\n");
}
【学习笔记】【C语言】位运算的更多相关文章
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 位运算
bitwise_and() 函数对数组中整数的二进制形式执行位与运算. import numpy as np print ('13 和 17 的二进制形式:') a,b = 13,17 print ( ...
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- C语言位运算
C语言位运算详解 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,shor ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- C语言位运算+实例讲解(转)
按位或 按位与 按位异或 按位取反 左移右移 C语言位运算 有6种: &, | , ^(亦或), >(右移). 注意:参与位运算的元素必须是int型或者char型,以补码形式出现. 按位 ...
- PHP算法学习(5) 位运算
svn地址:svn://gitee.com/zxadmin/live_z 2019年2月14日11:38:46 <?php /* * 位运算学习笔记 * * 1,php所有的数都是有符号的,无法 ...
- C语言位运算详解[转]
作者:911 说明:本文参考了http://www2.tsu.edu.cn/www/cjc/online/cyuyan/,算是对其的修正,在此将本文列为原创,实有抄袭之嫌疑.甚是惭愧! 位运算是指按二 ...
随机推荐
- android定位和地图开发实例
在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便. 首先介绍一下地图包中的主要类: MapController : 主要控制地图移动,伸缩,以某个GPS坐标 ...
- 【JavaScript】apply和call的区别在哪?
我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家 ...
- handler looper 和 线程
Handler的概念: 顾名思义,handler在英语中是“操作着,处理者的意思”,而官方的文档给出的概念是,handler允许你发送或者处理Message对象或者Runable对象,这两个对象都是 ...
- 一道模板元编程题源码解答(replace_type)
今天有一同学在群上聊到一个比较好玩的题目(本人看书不多,后面才知是<C++模板元编程>第二章里面的一道习题), 我也抱着试一试的态度去完成它, 这道题也体现了c++模板元编程的基础和精髓: ...
- HTML+CSS+JS基础知识
HTML+CSS+JS基础知识 目录 对HTML+CSS+JS的理解 基础知识 对HTML+CSS+JS的理解 基础知识 插入样式表的三种方式 外部样式表:<link rel="sty ...
- IOS文件系统和数据的永久性存储
IOS中的文件系统和数据的永久性存储 目录 概述——对文件系统和数据的永久性存储的理解 IOS中数据的永久性存储 NSUserDefaults 解档和归档 数据库 文件系统 NSBundle IOS的 ...
- ExchangeServeice获取在线outlook邮箱中的未读邮件
using Microsoft.Exchange.WebServices.Data; using System; using System.Collections.Generic; using Sys ...
- 什么是mysql中的元数据
一:什么是元数据? 所谓元数据,就是表示数据的数据,这些数据五花八门,总之,只要不是我们存储到数据库里的数据,大多都可以理解为元数据.描述数据库的任何数据—作为数据库内容的对立面—是元数据.因此,列名 ...
- IOS 给图片添加水印(文字)
有时候上传图片要加唯一标识,简单的就是添加一个水印.这里水印我们讲文字,可以是当前系统时间.坐标.地理位置等 原理就是把一个字符串写到图片上,并且字(font)的大小由图片大小控制. 以下是封装好的一 ...
- iOS- 自定义UIView (测试block和代理)
#import <UIKit/UIKit.h> typedef void(^compeletionHandler) (NSInteger selectButtonIndex); @clas ...