【转】
C提供了六种位运算运算符;这些运算符可能只允许整型操作数,即char、short、int和long,无论signed或者unsigned。
& 按位AND
| 按位OR
^ 按位异或
<< 左移
>> 右移
~ 求反(一元运算)
按位与操作&通常用于掩去某些位,比如
n = n & 0177;
使得n中除了低7位的各位为0。
按位或操作|用于打开某些位:
x = x | SET_ON;
使得x的某些SET_ON与相对的位变为1。
按位异或操作^使得当两个操作数的某位不一样时置该位为1,相同时置0。
应该区分位操作符&、|与逻辑操作符&&、||,后者从左到右的评价一个真值。比如,如果x为1、y为2,那么x & y为0,而x && y为1。
移位运算符<<和>>将左侧的操作数左移或者右移右操作数给定的数目,右操作数必须非负。因此x << 2将x的值向左移动两位,用0填充空位;这相当于乘4。右移一个无符号数会用0进行填充。右移一个带符号数在某些机器上会用符号位进行填充(“算数移位”)而在其他机器上会用0进行填充(“逻辑移位”)。
单目运算符~对一个整数求反;即将每一个1的位变为0,或者相反。比如
x = x & ~077
将x的后六位置0。注意x & ~077的值取决于字长,因此比如如果假设x是16位数那么就是x & 0177700。这种简易型式并不会造成额外开销,因为~077是一个常数表达式,可以在编译阶段被计算。
作为一个使用位操作的实例,考虑函数getbits(x,p,n)。它返回以p位置开始的n位x值。我们假设0位在最右边,n和p是正数。例如,getbits(x,4,3)返回右面的4、3、2位。
/* getbits: 返回从位置p开始的n位 */
unsigned getbits(unsigned x, int p, int n)
{
return (x >> (p+1-n)) & ~(~0 << n);
}
表达式x >> (p+1-n)将需要的域移动到字的右侧。~0是全1;将其左移n为并在最右侧填入0;用~使得最右侧n个1成为掩码。
C提供了六种位运算运算符;这些运算符可能只允许整型操作数,即char、short、int和long,无论signed或者unsigned。
& 按位AND
| 按位OR
^ 按位异或
<< 左移
>> 右移
~ 求反(一元运算)
按位与操作&通常用于掩去某些位,比如
n = n & 0177;
使得n中除了低7位的各位为0。
按位或操作|用于打开某些位:
x = x | SET_ON;
使得x的某些SET_ON与相对的位变为1。
按位异或操作^使得当两个操作数的某位不一样时置该位为1,相同时置0。
应该区分位操作符&、|与逻辑操作符&&、||,后者从左到右的评价一个真值。比如,如果x为1、y为2,那么x & y为0,而x && y为1。
移位运算符<<和>>将左侧的操作数左移或者右移右操作数给定的数目,右操作数必须非负。因此x << 2将x的值向左移动两位,用0填充空位;这相当于乘4。右移一个无符号数会用0进行填充。右移一个带符号数在某些机器上会用符号位进行填充(“算数移位”)而在其他机器上会用0进行填充(“逻辑移位”)。
单目运算符~对一个整数求反;即将每一个1的位变为0,或者相反。比如
x = x & ~077
将x的后六位置0。注意x & ~077的值取决于字长,因此比如如果假设x是16位数那么就是x & 0177700。这种简易型式并不会造成额外开销,因为~077是一个常数表达式,可以在编译阶段被计算。
作为一个使用位操作的实例,考虑函数getbits(x,p,n)。它返回以p位置开始的n位x值。我们假设0位在最右边,n和p是正数。例如,getbits(x,4,3)返回右面的4、3、2位。
/* getbits: 返回从位置p开始的n位 */
unsigned getbits(unsigned x, int p, int n)
{
return (x >> (p+1-n)) & ~(~0 << n);
}
表达式x >> (p+1-n)将需要的域移动到字的右侧。~0是全1;将其左移n为并在最右侧填入0;用~使得最右侧n个1成为掩码。
发表评论
-
gcc gdb常用命令
2010-10-06 11:20 1116gdb 链接: http://fanqiang.chinau ... -
指针数组,数组指针
2010-10-02 14:40 716void test(char* a[]) { ... -
如何用栈实现递归与非递归的转换
2010-04-10 15:18 944http://bbs.chinaunix.net/viewth ... -
华为笔试2
2009-06-16 09:37 977【转】http://hi.baidu.com/xiao1dia ... -
华为笔试1
2009-06-16 09:35 1011【转】http://hi.baidu.com/xi ... -
用两个栈实现一个队列的功能
2009-06-03 15:22 2573【转】http://hi.baidu.com/liangjw8 ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:41 1044【转】http://blog.csdn.net/s ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:39 1501【转】http://blog.csdn.net/seraphs ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:38 871【转】http://blog.csdn.net/s ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:37 873【转】http://blog.csdn.net/s ... -
c预编译 #define相关
2009-05-29 15:14 1190#是生成字符串: #define a(x) ... -
排序算法和二分查找
2009-05-17 15:50 809using namespace std; #includ ... -
sizeof union struct 内存对齐
2009-05-14 20:30 2541【转】http://www.programfan.com/bl ... -
求100的阶乘
2009-05-06 16:32 1535#include <stdio.h> int m ... -
字符串操作
2009-05-03 15:19 813#include "stdafx.h" ... -
C字符串反转
2009-05-03 10:53 1785更改下面程序 #include string.h ... -
C链表相关
2009-05-03 10:38 781#include "stdafx.h" ... -
C题库连接
2009-04-29 09:28 759http://blog.chinaunix.net/u2/64 ...
相关推荐
### C语言移位实现加减乘除 #### 概述 在计算机科学中,移位操作是一种高效且基本的操作方式,常被用于替代传统的算术运算。本文将深入探讨如何利用C语言中的移位操作来实现加减乘除四种基本运算,并通过具体的...
在给定的项目"SystemChange(c语言移位操作实现的10进制到16进制和2进制的转换)"中,开发者可能使用了这样的方法,并在VS2008环境下编写了代码。由于代码描述为"代码比较清秀,看了不后悔",我们可以预期代码的可读性...
关于C语言位操作,左移时总是移位和补零。右移时无符号数是移位和补零,此时称为逻辑右移;而有符号数大多数情况下是移位和补最左边的位(也就是补最高有效位),移几位就补几位,此时称为算术右移。
移位加密的C语言实现,比较完备的,可以参考参考
单片机C语言程序设计 K1-K4 控制LED移位(有源码)单片机C语言程序设计 K1-K4 控制LED移位(有源码)单片机C语言程序设计 K1-K4 控制LED移位(有源码)单片机C语言程序设计 K1-K4 控制LED移位(有源码)单片机C语言程序...
### C语言中的移位操作技巧 #### 一、概述 在C语言中,位操作是一项非常重要的技术,尤其是在处理硬件接口、低级编程以及优化算法性能等方面。位操作包括位的移动(移位)、位的逻辑运算等。本文将重点介绍几种...
c语言编写,欢迎扔板砖 //移位算法 #include #include #define SIZE 50 int main() { //i 用于计数输入个数,j 为临时变量, plain 存放明文, cipher 存放密文,decryption存放解密后文本,fpp 为明文文件指针,...
单片机C语言程序设计K1-K4 控制LED移位(基于8051+Proteus仿真)单片机C语言程序设计K1-K4 控制LED移位(基于8051+Proteus仿真)单片机C语言程序设计K1-K4 控制LED移位(基于8051+Proteus仿真)单片机C语言程序设计...
205 字符串字母移位 C语言源代码文件
C语言很多操作都是以字节为单位进行的,但有时为了节约空间,很多系统程序中要求在比特位级别进行运算处理。C语言一同提供了六种位运算的运算符,分别为&(按位与),|(按位或),~(按位取反),^(按位异或),&...
K1-K4 控制数码管移位显示(有源码)单片机C语言程序设计 K1-K4 控制数码管移位显示(有源码)单片机C语言程序设计 K1-K4 控制数码管移位显示(有源码)单片机C语言程序设计 K1-K4 控制数码管移位显示(有源码)单片机C
在这个项目中,我们关注的是一个使用C语言实现的移位加密和解密系统。移位加密是一种简单但有效的密码学技术,它通过将明文中的字符按照一定的位数进行移动来创建密文。这种加密方法在早期通信中被广泛应用,虽然...
### C语言左右循环移位详解 #### 一、引言 在计算机科学与技术领域,尤其是在数字信号处理、加密解密算法以及硬件编程等场景中,位操作是极为常见的技术手段之一。C语言作为一种底层语言,提供了丰富的位操作功能...
### C语言中的循环移位操作 在计算机科学与编程领域,循环移位(或称为循环移位、循环移位)是一种常见的数据处理方法,尤其是在低级编程和算法优化中经常用到。本篇文章将深入探讨如何在C语言中实现循环左移和循环...
294-用指针数组控制P0口8位LED流水点亮单片机C语言源码.zip项目程序C语言源码下载294-用指针数组控制P0口8位LED流水点亮单片机C语言源码.zip项目程序C语言源码下载 1.合个人学习技术做项目参考 2.适合学生做毕业设计...
C语言中关于字符串左右循环移位的问题 C语言中关于字符串左右循环移位的问题是一个经典的编程题型,今天我们将对其进行详解,并给出两种方法求解。 首先,让我们来解决字符串循环右移的问题。方法一:利用已有的...
移位密码是一种单表代换密码,它的加解密过程可以用以下方式表示:C=Ek(s)=(s+k) mod n, S=Dk(c)=(c-k) mod n,其中,c 表示密文字符,s 表示明文字符,k 表示移位的数字,n 表示代换字符集的字符总个数。移位密码...
单片机C语言程序设计14 K1-K4 控制数码管移位显示(基于8051+Proteus仿真)单片机C语言程序设计14 K1-K4 控制数码管移位显示(基于8051+Proteus仿真)单片机C语言程序设计14 K1-K4 控制数码管移位显示(基于8051+...
在C51单片机中,可以使用RR、RRC、RL、RLC等指令来实现移位运算,而在C语言中,可以使用和>>等运算符来实现移位运算。 1. 移位运算的实现 在C51单片机中,可以使用RR、RRC、RL、RLC等指令来实现移位运算。例如,...
密码实验:反馈移位寄存器和对偶移位寄存器的实现