您的位置:

c语言121位运算,计算10!c语言

本文目录一览:

C语言 位运算

~取反,0取反是1,1取反是0

是左移,比如1n,表示1往左移n位,即数值大小2的n次方

右移,类似左移,数值大小除以2的n次方

按位与,1与任意数等于任意数本身,0与任意数等于0,即1x=x,0x=0

|按位或,x|y中只要有一个1则结果为1

^按位异或,x^y相等则为0,不等则为1

所有数值必须转换为二进制数才能位运算,每一位数相对应运算

c语言位运算

一、位运算符C语言提供了六种位运算符:

按位与

| 按位或

^ 按位异或

~ 取反

左移

右移

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

例如:95可写算式如下: 00001001 (9的二进制补码)00000101 (5的二进制补码) 00000001 (1的二进制补码)可见95=1。

按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a255 运算 ( 255 的二进制数为0000000011111111)。

main(){

int a=9,b=5,c;

c=ab;

printf("a=%d\nb=%d\nc=%d\n",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\nb=%d\nc=%d\n",a,b,c);

}

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

main(){

int a=9;

a=a^15;

printf("a=%d\n",a);

}

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

5. 左移运算 左移运算符“”是双目运算符。其功能把“ ”左边的运算数的各二进位全部左移若干位,由“”右边的数指定移动的位数,

高位丢弃,低位补0。例如: a4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。6. 右移运算 右移运算符“”是双目运算符。其功能是把“ ”左边的运算数的各二进位全部右移若干位,“”右边的数指定移动的位数。

例如:设 a=15,a2 表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。

main(){

unsigned a,b;

printf("input a number: ");

scanf("%d",a);

b=a5;

b=b15;

printf("a=%d\tb=%d\n",a,b);

}

请再看一例!

main(){

char a='a',b='b';

int p,c,d;

p=a;

p=(p8)|b;

d=p0xff;

c=(p0xff00)8;

printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);

}

c语言之中的位运算符是怎么运算的呢?

C语言提供了表12—1所列出的6种位运算符以及表12-2所列出的5种扩展运算符。

表12-1

~

按位求反

左移

右移

按位与

^

按位异或

|

按位或

表12-2

=

a=2

a=a2

=

b=1

b=b1

=

a=b

a=ab

^=

a^=b

a=a^b

|=

a|=b

a=a|b

【说明】

位运算符中,只有“反求”(~)是单目运算符,即要求运算符两侧各有一个运算量,其余均为双目运算符。

运算的运算对象只能是整形或字符型数据,不能是其他类型的数据,在VC

6.0中整形数据占4个字节,字符型数据占1个字节。

参与运算时,操作数都必须首先转换成二进制形式,然后再执行相应的按位运算。

各双目运算符与赋值运算符结合可以组成扩展的赋值运算符,见表12-2.

12.2

位运算符详解

12.2.1

按位与运算

按位与运算“”的运算格式:

操作数1操作数2

【说明】

其中“操作数1”和操作数“2”必须是整型或字符型数据。

按位与运算规则是:当参加运算的2个二进制数的对应位都为1,则该位的结果为1,否则为0,即00=0,01=0,10=0,11=1。

【例如】

45的运算如下:

00000100

(4)

()

00000101

(5)

00000100

(4)

因此,45的值为4。

可以利用按位与运算来实现一些特定的功能,下面介绍几种常见的功能。

清零

如果想将一个数的全部二进制置为零,只要找一个二进制数,其中个个位要符合以下条件:原来的数中为1的位,新数中相应的位为0。然后使二者进行按位与运算即可达到清零的目的。

【例如】

原有数为171,其二进制形式为10101011,另找一个数,设它为00010100,它符合以上条件,即在原数为1的位置上,它的位值均为0。将两个数进行运算:

10101011

()

00010100

00000000

当然也可以不用00010100这个数而用其他数(如01000100)也可以,只要符合上述条件即可。任何一个数与“0”按位于之后的结果为0。

娶一个数中某些指定位

【例如】

有一个两字节的短整型数x,想要取其中的低字节,只要将x与八进制数(377)8按位于即可。如图12-1所示,经过运算“z=xy”后z只保留x的低字节,高字节为0.

x

00

10

11

00

10

10

11

00

y

00

00

00

00

11

11

11

11

z

00

00

00

00

10

10

11

00

图12-1

取x的低八位数

x

00

10

11

00

10

10

11

00

y

11

11

11

11

00

00

00

00

Z

00

10

11

00

00

00

00

00

图12-2

取x的高8位

如果想取两个字节中的高字节,如图12-2所示只需进行运算z

=

x

(177400)8。

保留一个数的某些位

要想将哪一位保留下来,就与一个数进行运算,此数在该位取1。

【例如】

有一数01110100,想把其中左面第1、3、5位保留下来,可以这样运算:

01110100

(十进制数116)

()

10101010

(十进制数170)

00100000

(十进制数32)

C语言位运算

不是按位与,是按位或

就是把二进制的每一位进行或运算也就是只要有一个是1,值就是1,都是0值才是0

int =1,b=2;则a|b的值为

00000000 00000000 00000000 00000001 |

00000000 00000000 00000000 00000010 =

00000000 00000000 00000000 00000011

按位与正好相反

是有一个0值就是0,只有都是1值才是1

按位异或是两都相同为0,不相同为1

按位取反就是0变成1,1变成0了

int型是多大与CPU有关,你的书可能比较老了,还是16位,现在的主流机器都是32位的,先进的都64位了

C语言中的位运算是怎样的

C语言是为描述系统而设计的,它的第一个应用就是UNIX操作系统的设计,因此必须具有低级语言的特点。指针运算和位运算就是其代表。

我们知道,计算机中的信息以及控制信号均是以二进制码的0、1的形式存储和处理的。每一个0或1称为一个“位”(bit),8位构成一个字节(byte)。在内存中,每一个字节均有一个编号,称为内存地址。

在以前的各章节中,我们都是将一个字节(如字符型)和若干字节(如整型、实型等)中的内容作为一个整体进行处理的(赋值、运算、I/O操作)。

位运算则是针对这些字节中的若干位进行操作。这在系统软件设计中和自动控制中是十分有用的。

C语言的位运算符有~,,

,

,

|,

^共6个,并可与赋值运算符相结合(除~外)成为位运算赋值操作。

应注意:参与位运算的量只能是整型和字符型。

c语言的位符号 都是怎么运算的啊

C语言提供的位运算符列表:

运算符

含义

描述

按位与

如果两个相应的二进制位都为1,则该位的结果值为1,否则为0

|

按位或

两个相应的二进制位中只要有一个为1,该位的结果值为1

^

按位异或

若参加运算的两个二进制位值相同则为0,否则为1

~

取反

~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0

左移

用来将一个数的各二进制位全部左移N位,右补0

右移

将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0