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

发布时间:2022-11-23

本文目录一览:

  1. C语言 位运算
  2. c语言位运算
  3. c语言之中的位运算符是怎么运算的呢?
  4. C语言位运算
  5. C语言中的位运算是怎样的
  6. c语言的位符号 都是怎么运算的啊

C语言 位运算

  • ~:取反,0取反是1,1取反是0。
  • <<:左移,比如 1 << n 表示将1左移n位,即数值大小为 2n 次方。
  • >>:右移,类似左移,数值大小为除以 2n 次方。
  • &:按位与,1与任意数等于任意数本身,0与任意数等于0,即 1 & x = x0 & x = 0
  • |:按位或,x | y 中只要有一个1则结果为1。
  • ^:按位异或,x ^ y 相等则为0,不等则为1。
  • 所有数值必须转换为二进制数才能进行位运算,每一位数相对应运算。

c语言位运算

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

  • &:按位与
  • |:按位或
  • ^:按位异或
  • ~:取反
  • <<:左移
  • >>:右移

1. 按位与运算

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

int a = 9, b = 5, c;
c = a & b;
printf("a=%d\nb=%d\nc=%d\n", a, b, c);

输出:

a=9
b=5
c=1

2. 按位或运算

按位或运算符 | 是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。 示例:

int a = 9, b = 5, c;
c = a | b;
printf("a=%d\nb=%d\nc=%d\n", a, b, c);

输出:

a=9
b=5
c=13

3. 按位异或运算

按位异或运算符 ^ 是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现。 示例:

int a = 9;
a = a ^ 15;
printf("a=%d\n", a);

输出:

a=6

4. 求反运算

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

~(0000000000001001) => 1111111111110110

5. 左移运算

左移运算符 << 是双目运算符。其功能是把 << 左边的运算数的各二进位全部左移若干位,由 << 右边的数指定移动的位数,高位丢弃,低位补0。 示例:

int a = 3; // 二进制为 00000011
int b = a << 4; // 左移4位后为 00110000 (十进制48)

6. 右移运算

右移运算符 >> 是双目运算符。其功能是把 >> 左边的运算数的各二进位全部右移若干位,>> 右边的数指定移动的位数。 示例:

int a = 15; // 二进制为 00001111
int b = a >> 2; // 右移2位后为 00000011 (十进制3)

示例代码

unsigned a, b;
printf("input a number: ");
scanf("%d", &a);
b = a << 5;
b = b >> 15;
printf("a=%d\tb=%d\n", a, b);

另一个示例

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

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

C语言提供了以下6种位运算符以及5种扩展运算符:

表12-1 位运算符

运算符 含义 优先级
~ 按位求反
<< 左移
>> 右移
& 按位与
^ 按位异或
| 按位或

表12-2 扩展运算符

扩展运算符 等价表达式
&= a &= 2
>>= b >>= 1
<<= a <<= b
^= a ^= b
|= a |= b

说明:

  • 位运算符中,只有“反求”(~)是单目运算符,其余均为双目运算符。
  • 运算对象只能是整型或字符型数据。
  • 参与运算时,操作数都必须首先转换成二进制形式,然后再执行相应的按位运算。
  • 各双目运算符与赋值运算符结合可以组成扩展的赋值运算符。

12.2 位运算符详解

12.2.1 按位与运算

按位与运算 & 的运算格式:

操作数1 & 操作数2

说明:

  • 其中“操作数1”和“操作数2”必须是整型或字符型数据。
  • 当参加运算的两个二进制数的对应位都为1,则该位的结果为1,否则为0,即 0 & 0 = 00 & 1 = 01 & 0 = 01 & 1 = 1

示例:

4 & 5 的运算如下:
00000100 (4)
00000101 (5)
00000100 (4)
因此,4 & 5 的值为4。

常见功能:

  • 清零:如果想将一个数的全部二进制置为零,只要找一个二进制数,其中各位要符合以下条件:原来的数中为1的位,新数中相应的位为0。然后使二者进行按位与运算即可达到清零的目的。
  • 取一个数中某些指定位:例如有一个两字节的短整型数 x,想要取其中的低字节,只要将 x 与八进制数 377 按位与即可。
  • 保留一个数的某些位:要想将哪一位保留下来,就与一个数进行运算,此数在该位取1。

C语言位运算

不是按位与,是按位或。 就是把二进制的每一位进行或运算,也就是只要有一个是1,值就是1,都是0值才是0。 示例:

int a = 1, b = 2;
int c = 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有关,现在的主流机器都是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