C#位操作
2024-10-20 23:09:17
一.原码与补码
在计算机系统中,数值一律用补码来存储(表示)。主要原因:使用补码,可以将符号位和其他位统一处理;同时减法也可按加法来处理。另外,两个补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
1.原码转补码分两种情况
(1)正数的补码:与原码相同(已知原码求补码)
例如:+9的原码是0000 1001。补码也是0000 1001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1。
例如:-7原码为1000 0111(高位为符号位,1表示负数,0表示正数),补码为1111 1001.
2.补码转原码也分两种情况(已知补码求原码)
(1)正数的原码:与补码相同
例如:+9的补码是0000 1001。原码也是0000 1001。
(2)负数的原码:符号位为1,其余位为该该补码按位取反,然后整个数加1。
例如:-7的补码是1111 1001,原码是1000 0111。
二.移位运算符
左移 (<<)
将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0。
左移相当于乘. 左移一位相当于乘2;左移两位相当于乘4;左移三位相当于乘8。
x<<1等于 x*2
x<<2等于x*4
同理, 右移即相反:
右移 (>>)
将第一个操作数向右移动第二个操作数所指定的位数,空出的位置补0。
右移相当于整除. 右移一位相当于除以2;右移两位相当于除以4;右移三位相当于除以8。
x>>1等于 x/2
x>>2等于 x/4
因为位移比乘除速度快.对效率要求高,而且满足2的幂次方的乘除运方,可以采用位移的方式进行
位运算只能用于byte short char int long 等整型类型,不能应用于浮点数操作
最新文章
- EXC_ARM_DA_ALIGN
- Boost学习笔记(一) 什么是Boost
- iOS视图生命周期与视图控制器关系
- css在各浏览器中的兼容问题
- 3.linux安装vsftpd服务
- error while loading shared libraries: libevent-1.x.so.1
- BZOJ 无数据题集合
- How to convert `ctime` to `datetime` in Python? - Stack Overflow
- hibernate中的sql语句
- Redis笔记-Sentinel哨兵模式
- 【自动化测试】robot framwork的一点小发现
- 微信网页授权获取用户openid及用户信息
- Microsoft.AspNet.Identity 重置密码
- PHP从入门到精通(一)
- Python开发【笔记】:aiohttp搭建简易聊天室
- Windows环境下ELK平台的搭建
- python学习 day01 基础介绍
- 用一句SQL查询相对复杂的统计报表
- 1004 Counting Leaves (30)(30 point(s))
- 告诉我, 究竟我的SQL Server慢在哪里?
热门文章
- JavaScript如何获取/计算页面元素的offset?
- Java-方法的覆写
- Appium+python自动化9-SDK Manager
- EventStore .NET API Client在使用线程池线程同步写入Event导致EventStore连接中断的问题研究
- .net 导出带条码的PDF
- 如何查看ESXi的网卡的MAC地址?
- js定义对象并赋值
- http://m.blog.csdn.net/article/details?id=49132747
- c语言打印uint64, int64
- Emacs在RHEL 5上的安装和使用