c语言位运算

作者&投稿:戊芬 (若有异议请与网页底部的电邮联系)
c语言位运算~

一、位运算符C语言提供了六种位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移

1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。

按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
main(){
int a=9,b=5,c;
c=a&b;
printf("a=%d
b=%d
c=%d
",a,b,c);
}

2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下: 00001001|00000101
00001101 (十进制为13)可见9|5=13
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d
b=%d
c=%d
",a,b,c);
}

3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)
main(){
int a=9;
a=a^15;
printf("a=%d
",a);
}

4. 求反运算 求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110

5. 左移运算 左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,
高位丢弃,低位补0。例如: a>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。
main(){
unsigned a,b;
printf("input a number: ");
scanf("%d",&a);
b=a>>5;
b=b&15;
printf("a=%db=%d
",a,b);
}
请再看一例!
main(){
char a='a',b='b';
int p,c,d;
p=a;
p=(p<<8)|b;
d=p&0xff;
c=(p&0xff00)>>8;
printf("a=%d
b=%d
c=%d
d=%d
",a,b,c,d);
}

float向int型强制类型转换的原则,是多余的字节丢弃,
所以:
(int)((int)(x)+y)
=(int)((int)7.5+4.8)
=(int)(7+4.8)
=(int)11.8
=11

(int)(int(x)-y) //这个原先写错了,最前面少了一个(int)
=(int)(int7.5-4.8)
=(int)(7-4.8)
=(int)2.2
=2

所以表达式a+(int)((int)(x)+y)>>(int(x)-y)可以转换为:
a+11>>2
=4+11>>2
=15>>2

对于>>操作,将15先转换为二进制形式:1111
再进行1111>>2处理:
1111>>2=0011

再将0011转换为十进制数,也就是3

这个涉及到运算符的优先级和结合性,搜索一大堆
m=a>b 这个表达式,因为关系运算符的优先级大于赋值运算符,所以相当于m=(a>b)
a为5 b为6 所以a>b为假 即为0 将0赋给m
n=c>d 同理 n的值为0
0&0 结果为0

int Calc ( int x, int y )
{
unsigned long tmp;
int po, no;
int isXBigger;

isXBigger = ( x & 0x7FFFFFFF ) ^ ( y & 0x7FFFFFFF );
tmp = isXBigger | ( isXBigger >> 1 );
tmp = tmp | ( tmp >> 2 );
tmp = tmp | ( tmp >> 4 );
tmp = tmp | ( tmp >> 8 );
tmp = tmp | ( tmp >> 16 );
tmp = isXBigger & ~( tmp >> 1 );
tmp = !( tmp & x );
isXBigger = !( x >> 31 ) & ( y >> 31 ) | ( !( ( x ^ y ) >> 31 ) & !tmp );
isXBigger = isXBigger - 1;

tmp = ( x & 0x7FFFFFFF ) + ( y & 0x7FFFFFFF );
po = !(x >> 31 | y >> 31 ) & tmp >> 31;
po = po - 1;
no = x >> 31 & y >> 31 & !( tmp >> 31 );
no = no - 1;
tmp = x + y;
tmp = ( po & tmp ) + ( ~po & ( ( ~isXBigger & x ) + ( isXBigger & y ) ) );
tmp = ( no & tmp ) + ( ~no & ( ( isXBigger & x ) + ( ~isXBigger & y ) ) );
return tmp;
}

按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0

所以请参考javanetwork 兄的回答。


C语言——位运算
C语言中,位运算是一种独特且强大的功能,它直接作用于二进制位级,对数据进行操作。位运算符包括按位取反(~)、左移(<>)、按位与(&)、按位或(|)和按位异或(^)。以下是这些运算符的简介和示例:1. 按位取反(~):单目运算符,将运算数所有位取反,如无符号字符a=18,~a的结果...

C语言位运算符:与、或、异或、取反、左移和右移!
在C语言的世界里,位操作符犹如二进制运算的瑞士军刀,它们包括按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<>),在处理二进制数据时展现出了强大的威力。<\/ 按位与(&):<\/ 这个运算符如同一个精密的清零工具,通过与操作可以清零低字节或保留特定位。例如,60与17的按位与运算结...

C语言位运算符:与、或、异或、取反、左移和右移!
C语言的世界里,隐藏着一组神秘的代码符咒——位运算符,它们分别是:&(按位与)、|(按位或)、^(按位异或)、~(取反)、<>(右移)。这些运算符,如同魔法般,让整型数据(char, short, int, long)在二进制的舞台上跃动,展示着它们独特的魔力。首先,我们来看看&(按位与):它就像一...

c语言的位运算是什么?
是位运算,,先把a,b转化成二进制。然后位相或,有1出1,无1出0。比如,a=5,b=2,5的二进制表示是101。2的二进制表示是10,那么101|10=111,111十进制表示是7。所以a|b=7,如果a=3,b=2,那么a|b,结果是,11|10=11,a|b=3。比如输出"asdf\\b\\b"那么你看到的任然是asdf但是光标在...

位运算符C语言的六种位运算符
位运算符是C语言中的强大工具,包括按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<>)。按位与(&)用于清零或保留特定位,如将a的高八位设为0,低八位保留,使用a&255。示例代码中,通过a&b计算得到c。按位或(|)是当至少一个对应位为1时,结果位为1,如9|5等于13,用于合并...

c语言位运算的结果是什么?
结果:2561327494111820313。C语言位运算 有6种: &, | , ^(亦或), <<(左移), >>(右移)。注意:参与位运算的元素必须是int型或者char型,以补码形式出现。按位与& &运算常应用于:迅速清零、保留指定位、判断奇偶性。a & 1 = 1;则a为奇数 b & 1 = 0;则a为偶数 ...

C语言位运算
a&b 相同位的两个数字都为1,则为1;若有一个不为1,则为0。 a|b 相同位只要一个为1即为1。 a ^ b 相同位不同则为1,相同则为0。 ~a 取反a << b 左移b位a >> b右移b位 secondDboy | 发布于2012-02-07 举报| 评论 25 3 还是看书吧,有专门章节解释位运算的 DDHX2008 | 发布于20...

C语言 位运算
C语言中的位运算提供了一种高效的处理二进制数据的方法。首先,我们有取反操作,0取反变成1,1取反则变成0。对于位左移(<<),比如1<<n,意味着将1向左移动n位,相当于数值乘以2的n次方。右移(>>)与左移类似,数值除以2的n次方。接着是按位与(&),当1与任意数结合时,结果保持原数,0...

c语言位运算符有哪些?
位操作运算都只能是整形或字符型,字符型实际是单字节整形。包括以下几个操作符:按位与&,按位或 |,按位异或 ^,左移<<,右移>>另外还有一个取余操作:%a%b的意思是,a除以b,取余数。这个是C语言的硬性规定,位操作都是正数按照二进制进行表达的时候才有的概念;而取余操作是整数相除得余数...

C语言中位运算符的结果为0还是1呢?
1&1=1;即:两位同时为“1”,结果才为“1”,否则为0。按位与运算 按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只要对应的二个二进位都为1时,结果位就为1。参与运算的两个数均以补码出现。 例如:3&10可写算式如下: 00000011&00001010 00000010 十进制2。

禹会区13382617908: C语言什么是位运算 -
宗圣毓维孚: C语言是为描述系统而设计的,它的第一个应用就是UNIX操作系统的设计,因此必须具有低级语言的特点.指针运算和位运算就是其代表. 我们知道,计算机中的信息以及控制信号均是以二进制码的0、1的形式存储和处理的.每一个0或1称为...

禹会区13382617908: 好心人帮我解释一下c语言中的位运算 -
宗圣毓维孚: &就是按位与 比如说a = 2&1; 先把2和1化作二进制,00000010&00000001=00000000这题你把优先级搞明白就不难看懂,~要高于<<, 所以就是先把x向右移(p+1-n)位,在把得到的数与(~0<<n)按位与 (~0<<n)是先把0按8位取反就得到11111111,再把11111111向左移n位这题对于刚开始学的肯定有难度,你可以去几个数试一试,慢慢就会理解了 呵呵,祝你好运. 再就是如果你刚开始学可以把位运算放一下,重点是指针和结构体,指针重要性就啥也不说了.结构体也非常重要,数据结构中,还有就是以后学面向对象的语言时结构体是类的雏形啊.

禹会区13382617908: C语言位运算 -
宗圣毓维孚: 位运算是把一个十进制数化为对应的二进制数,在进行位操作,最后把变换得到的结果化为十进制

禹会区13382617908: C语言编写程序,进行位运算. -
宗圣毓维孚: 位运算 在很多系统程序中常要求在位(bit)一级进行运算或处理.C语言提供了位运算的功能, 这使得C语言也能像汇编语言一样用来编写系统程序.一、位运算符C语言提供了六种位运算符:& 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> ...

禹会区13382617908: C语言什么叫做位运算符 -
宗圣毓维孚: 移位,按位与,按位或,取反等等..当要对2进或者其他码进行运算时候要用到..如果你学到硬件编程,你就知道位运算的用处了..我是搞单片机的,经常要用到位运算..

禹会区13382617908: C语言 位运算 -
宗圣毓维孚: 按照位运算,0跟1相与和0跟0相与为0,1跟1相与为1. 根据这个算法,假设a有16位,某种情况下只需要后8位,前八位归0,就可以采用与0000000011111111这个16位数字相与,因为a的前八位不管是0还是1,与0相与都化为零,后八位不管是0还是1,与1相与还是原数.也就是所说的”把数值a的高八位清零,保留低八位“

禹会区13382617908: 关于C语言的位运算. -
宗圣毓维孚: 如果你是要把两个short组成一个int的话就是 short p,k; int newint; printf("输入整数k和p:"); scanf("%d%d",&k,&p); newint=(p printf("new int=%d\n\n",newint); 如果是要取一个int的高16位和一个int的低16位组成一个新数的话就是 int p,k,newint; printf("输入整数k和p:"); scanf("%d%d",&k,&p); newint=(p&0xFFFF0000)|(k&0x0000FFFF); printf("new int=%d\n\n",newint);

禹会区13382617908: C语言中的位运算是干什么的? -
宗圣毓维孚: 通常在遇到BYTE运算问题时要用.例如GIF image 文件中的"屏幕定义块"中的第5个字节(BYTE) 是 "packed Fields",最高位1个Bit是有无全局调色盘标志位.接下来3个Bit是分辩率 接下来1个Bit是调色盘颜色是否安出现频繁程度分过类的标...

禹会区13382617908: 什么是位运算 -
宗圣毓维孚: 位运算通常是指对2进制数的运算,常见的位运算符有 & 按位与 | 按位或 ^ 按位异或 ~ 取反 > 右移 M>1是将M转化为2进制数,向右移动一位.

禹会区13382617908: c语言位运算有什么作用 -
宗圣毓维孚: 可以用位运算做文件加密,比如一个文档,让其中的内容位运算,再打开就会显示一堆乱码,除非按特定的位运算变回来

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网