博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于位移运算
阅读量:6093 次
发布时间:2019-06-20

本文共 1565 字,大约阅读时间需要 5 分钟。

C语言里所有的位运算都是指二进制数的位运算。即使输入的是十进制的数,在内存中也是

存储为二进制形式。

1.

左移运算符“< <”用法:

(左移运算是将一个二进制的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0)

 

格式是:a<<m, a和m必须是整型表达式,要求m>=0。

功能:将整型数a按二进制位向左移动m位,高位移出后,低位补0。

 

右移运算符“> >”用法:

(右移运算是按指定移动位数向右移动,移出位被丢弃,左边移动的空位一律补0)

格式是:a>>m, a和m必须是整型表达式,要求m>=0。

功能:将整型数a按二进制位向右移动m位,高位移出后,低位补0。

对于无符号数,进行右移时,左边空出的部分补0.

对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0;

而为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定。

Turbo C和很多系统规定为补1。

 

 

2.

 C语言8进制移位计算

八进制数177777>>2

无符号数结果是037777

(例如无符号的177777转换成二进制是001 111 111 111 111 111,右移两位是

000 011 111 111 111 111,再转换成八进制就是037777)

 

有符号数结果是637777

(有符号的时候,右移两位补充1,110 011 111 111 111 111,转换成八进制就是637777)

 

3.

C语言中,移位表示什么?有什么用?

比较浅显的说来,左移n位就是乘以2的n次方,右移n位就是除以2的n次方,具体细节如下:

 

先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符,例如:

 

int i = 1;

i = i<<2;//把i里的值左移2位

(也就是说,1的二进制是0000 0001,左移2位之后变成0000 0100,也就是十进制的4,所以

 左移1位就是乘以2,那么左移n位就是乘以2的n次方)(有符号数不完全适用,因为左移有可能导致符号变化)

需要注意的一个问题是:int类型最左端的符号位和移出去的情况,我们知道,int 是有符号的整型数,

最左端的1位是符号位,即0正1负,那么移位的时候就会出现溢出,例如:

 int i = 0x40000000;//16进制的4000 0000,为二进制的0100 0000 0000 0000 0000 0000 0000 0000

//4000 0000共八位,故用二进制表示为32位。

i = i<<1;

那么,i在左移1位之后就会变成0x40000000,也就是二进制的1000 0000 0000 0000 0000 0000 0000 0000

 

待补充右移运算。

 

因为位移运算的速度比乘法快很多,所以在处理数据的乘法或除法运算数字(当要乘或除的数字是2的次方时候,采用

位移运算可以获得较快的运算速度,提高程序的运行效率)。

 

4.与运算 &:

   两个都为1,才为1;

   或运算 |:

   一个为1,就为1;

 

   异或运算 ^:

   同为0,异为1;

   (异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:

     0异或0=0,1异或  0=1,0异或1=1,1异或1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位);

运算规则如下:

 

0&0 = 0;    0|0= 0;  0^0 = 0;

 

0&1 = 0;    0|1= 1;  0^1 = 1;

 

1&0 = 0;    1|0= 1;  1^0 = 1;

 

1&1 = 1;    1|1= 1;  1^1 = 0;

 

 

 

 

 

转载于:https://www.cnblogs.com/jiangshiyong/archive/2012/08/27/2650082.html

你可能感兴趣的文章
Win10桌面奔溃怎么办?雨林木风Win10奔溃解决方法教程
查看>>
mysql Inoodb 内核
查看>>
Redis 基础
查看>>
UITextField的returnkey点击事件
查看>>
特殊字体引用
查看>>
owlcar 用法心得 自定义导航
查看>>
数据结构 学习笔记03——栈与队列
查看>>
DB2 OLAP函数的使用(转)
查看>>
数学之美系列二十 -- 自然语言处理的教父 马库斯
查看>>
Android实现自定义位置无标题Dialog
查看>>
面试总结
查看>>
Chrome浏览器播放HTML5音频没声音的解决方案
查看>>
easyui datagrid 行编辑功能
查看>>
类,对象与实例变量
查看>>
HDU 2818 (矢量并查集)
查看>>
【转】php字符串加密解密
查看>>
22. linux 常用命令
查看>>
ASP.Net 使用GridView模板删除一行的用法
查看>>
(十六)字段表集合
查看>>
JPGraph
查看>>