C/C++ 位操作
C/C++对位操作有如下方法:
<1>位操作运算符(注意:下面几个运算符不改变原来的变量的值,只是获得运算的结果即一个新值)
按位取反:~
位与:&
位或:|
位异或:^
左移位运算符:<<
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
右移位运算符:>>
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
无符号右移运算符:>>>
>>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。
<2>位字段
如下C++代码:
struct bits
{
unsigned int a:;
unsigned int b:;
unsigned int c:;
unsigned int d:;
};
位字段由一个结构声明,该结构声明为每个字段提供标签,并决定标签字段的宽度.
上面的使用unsigned int作为位字段结构的基本布局单元,因此即使一个结构只有一个一位的成员字段,该结构也和一个unsigned int的大小相同,上面用sizeof看为8,机器sizeof(unsigned int)为4,若把最后一个改为d:20,则本机器的sizeof刚好为4.
另外,十六进制前面加 0x,八进制前加 0
-------------------------------------------------------------------------------------------------------------------------------------------------------
一:写一个函数,返回将给定数字的后给定位数反转,即0变1,1变0
思路:~是将整个数的全部位取反了,不合适.用异或^,把给定值和一个后面几位全部是1前面剩下的都是0的数^,即可.
关键是怎么获得那个后面几位全是1的数?
#include <iostream> using namespace std; int invert_end(int num,int bits) //第一个表示传进来的数值,第二个是让这个数值的后多少位反转
{
int mask=; //此时全部位为0
int temp=; //此时它的最后一位是1 while (bits>)
{
mask=mask|temp; //或,每次只把1位置为1
temp=temp<<; //它的唯一一个是1的位向左移
bits--;
} return num^mask; //mask的后几位已经为1,异或即可
} int main(void)
{
cout<<sizeof(int)<<endl;
int val;
cout<<"输入一正整数:\n";
cin>>val; int res=invert_end(val,);
cout<<val<<" "<<res; cin.get();
return ;
}
C/C++ 位操作的更多相关文章
- 《Entity Framework 6 Recipes》中文翻译系列 (19) -----第三章 查询之使用位操作和多属性连接(join)
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-16 过滤中使用位操作 问题 你想在查询的过滤条件中使用位操作. 解决方案 假 ...
- 如何获取byte的各个bit值以及常见位操作
项目中通过信号采集板的数据获取车上仪表盘指示灯的信息,将接收到的数据转成byte后,还要将每一个Byte的各个Bit值分离出来,这样才知道每个bit的值代表的具体信息.这里记录下如何获取byte的各个 ...
- php strtotime 在32位操作系统下的限制
php strtotime 在32位操作系统下的限制 <?php class DateHelper{ /** * 在32位操作系统下,超过 2038-01-19 03:14:07 ,会溢出 * ...
- C#按位操作,直接操作INT数据类型的某一位
/// <summary> /// 根据Int类型的值,返回用1或0(对应True或Flase)填充的数组 /// <remarks>从右侧开始向左索引(0~31)</r ...
- 64位操作系统 通过ODP.NET 访问ORACLE 11g
摘要:64位操作系统部署.NET 程序访问oracle时,无法连接问题.(注意:客户端是64位系统 ,服务端是否64位 还是32位无关.) 1.到oracle 官网搜索相关版本的 ODAC网址: ht ...
- java位操作总结
在计算机中所有数据都是以二进制的形式储存的. 位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快. 方便演示,首先写个二进制打印方法: private static void ...
- (原)解决.NET 32位程序运行在64位操作系统下的兼容性问题
背景:一个第三方组件是C++.NET 32位开发的,后被C#(基于FrameWork4.0)调用并封装成组件,此二次封装的组件无法运行于64位操作系统上. 开发环境:VS2012:解决 ...
- (Array,位操作)137. Single Number II
Given an array of integers, every element appears three times except for one. Find that single one. ...
- delphi.位操作
位操作网上有很多介绍,请上网google/baidu,比如: 位操作技巧实例大全: http://blog.csdn.net/g_spider/article/details/5750665 位操作基 ...
- iis6|iis7|配置URLRewriter|64位操作系统下|.net2.0|.net4.0|配置URLRewriter|Web.config配置详情
想必很多ASP.NET的码友们在IIS配置伪静态被严重纠结过不止一次两次,本园主经过多次站点伪静态配置,总结了一下,IIS版本:IIS 6.IIS 7,服务器:Windows Server 2003. ...
随机推荐
- 实现dedecms(PC端)全站动态浏览 并实现伪静态
dedecms默认是生成静态文件,如何实现织梦(PC端)全站动态浏览呢? 织梦全站动态浏览方法 1. 修改首页为动态浏览 后台-生成-更新首页-勾选“仅动态浏览” 2. 修改栏目页为动态浏览 ①添加或 ...
- Win10系统64位快速专业安装版 V2016年
win10系统64位快速专业安装版 V2016年2月 系统下载:http://www.xitongma.com/ Ghost Win10 64位正式装机专业版2016 微软向Windows用户推送了w ...
- codeforces 121 E. Lucky Array
time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standa ...
- COGS 264. 数列操作
时间限制:1 s 内存限制:160 MB [问题描述] 假设有一列数 {Ai }(1 ≤ i ≤ n) ,支持如下两种操作: (1)将 A k 的值加 D .( k, D 是输入的数) (2) 输 ...
- Codeforces Round #318 (Div. 2) C Bear and Poker (数学)
简单题,求一下所有数的2和3的幂是任意调整的,把2和3的因子除掉以后必须相等. 求lcm,爆了long long.我得好好反省一下,对连乘不敏感 #include<bits/stdc++.h&g ...
- 【算法基础】欧几里得gcd求最大公约数
package Basic; import java.util.Scanner; public class Gcd { public static void main(String[] args) { ...
- 【page-monitor 前端自动化 下篇】 实践应用
转载文章:来源(靠谱崔小拽) 通过page-diff的初步调研和源码分析,确定page-diff在前端自动化测试和监控方面做一些事情.本篇主要介绍下,page-diff在具体的实践中的一些应用 核心d ...
- 换个语言学一下 Golang (1)
做技术的总是有些拗.这么多年一直在.net的框框里打转转.直到现在市场上.net工作越来越难找,项目越来越老才发现不做出改变不行了.就从学习Go开始吧. Go语言的特点 简洁.快速.安全 并行.有趣. ...
- PHP 头部utf-8
只是自己用的一些存储,请各位看官大大勿怪. header("Content-Type: text/html;charset=utf-8"); 2019年04月10日
- Bootstrap历练实例:表单帮助文件
Bootstrap表单控件可以在输入框input上有一个块级帮助文本,为了添加一个占用整个宽度的内容块,请在input后添加help-block. 实例: <!DOCTYPE html>& ...