C语言-函数、数组和操作符-4

本文详细介绍了C语言中的函数、数组和各种操作符的使用,包括求和函数、数组的运用、算术及移位操作符。重点讲解了右移和左移操作符以及位操作符(按位与、按位或、按位异或)的原理和实例,同时还涵盖了赋值、逻辑、单目和复合操作符的用法。
摘要由CSDN通过智能技术生成

 1、(1)求和

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

int m=0;

int n=0;

scanf("%d%d",&m,&n);

int sum=m+n;

printf("%d\n",sum);

return 0;

}

(2)利用函数求和

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int add(int a,int b)

{

int c=0;

c=a+b;

return c;

}

int main()

{

int x=0;

int y=0;

scanf("%d%d",&x,&y);

int z=add(x,y);

printf("%d\n",z);

return 0;

}

2、数组

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<string.h>

int main()

{

       int arr[11] = { 0,1,2,3,4,5,6,7,8,9,10 };

       char ch[5] = { 'a','b','c' };          //不完全初始化,剩余默认为0

       int i = 0;

       while (i < 11)

       {

              printf("%d ", arr[i]);

              i++;

       }

       printf("\n");

       i = 0;

       while (i < 5)

       {

              printf("%c ", ch[i]);

              i++;

       }

       return 0;

}

3、操作符

(1)算术操作符

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

       int m = 10 / 3;

       float n = 10 / 3;

       float p = 10 / 3.0;

       int q = 10 % 3;

       printf("%d\n", m);

       printf("%f\n", n);

       printf("%f\n", p);

       printf("%d\n", q);

       return 0;

}

(2)移位操作符

初始时,变量a被初始化为3,其二进制表示为 0000 0011

右移一位表示将二进制数向右移动一位,空出的位置用0填充。移位后得到的结果为 0000 0001,转换为十进制即为1

左移一位表示将二进制数向左移动一位,空出的位置用0填充。移位后得到的结果为 0000 0110,转换为十进制即为6

对于有符号整数的右移操作,根据C语言标准规定,实施右移操作时,对于正数,用0填充空出的位置,对于负数,用1填充空出的位置。

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

int a=3;

int b=a>>1;

int c=a<<1;

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

printf("%d\n",b);

printf("%d\n",c);

return 0;

}

(3)位操作符

&  按位与:

【这个操作符会将两个数的二进制形式进行操作,如果两个相应的二进制位都是1,则该位的结果值为1,否则为0例如:

int a = 60;    // 60 = 0011 1100
int b = 13;    // 13 = 0000 1101
int c = a & b; // c  = 0000 1100 = 12

在这个例子中,ab的二进制表示分别是0011 11000000 1101。当这两个二进制数进行按位与操作后,结果为0000 1100,这正是12的二进制表示。】

|  按位或:

【这个操作符会将两个数的二进制形式进行操作,如果两个相应的二进制位中有一个是1,则该位的结果值为1,否则为0

例如:

cint a = 60;    // 60 = 0011 1100
int b = 13;    // 13 = 0000 1101
int c = a | b; // c  = 0011 1101 = 61

在这个例子中,ab的二进制表示分别是0011 11000000 1101。当这两个二进制数进行按位或操作后,结果为0011 1101,这正是61的二进制表示。】

^  按位异或:

【这个操作符会将两个数的二进制形式进行异或操作,如果两个相应的二进制位不同,则该位的结果值为1,否则为0

例如:

cint a = 60;    // 60 = 0011 1100
int b = 13;    // 13 = 0000 1101
int c = a ^ b; // c  = 0011 0001 = 49

在这个例子中,ab的二进制表示分别是0011 11000000 1101。当这两个二进制数进行按位异或操作后,结果为0011 0001,这正是49的二进制表示。】

(4)赋值操作符号

=赋值运算符,将右边的值赋给左边的变量。例如:int a = 5;,这表示将5赋值给变量a

+=加等于运算符,将左边的值与右边的值相加,并将结果赋值给左边的变量。例如:int a = 5; a += 3;,这表示将a的值为5,然后加上3,再将结果8赋值给a

-=减等于运算符,将左边的值与右边的值相减,并将结果赋值给左边的变量。例如:int a = 5; a -= 3;,这表示将a的值为5,然后减去3,再将结果2赋值给a

*=乘等于运算符,将左边的值与右边的值相乘,并将结果赋值给左边的变量。例如:int a = 5; a *= 3;,这表示将a的值为5,然后乘以3,再将结果15赋值给a

/=除等于运算符,将左边的值与右边的值相除,并将结果赋值给左边的变量。例如:int a = 5; a /= 3;,这表示将a的值为5,然后除以3,再将结果1.6666666666667赋值给a

^=异或等于运算符,将左边的值与右边的值进行异或运算,并将结果赋值给左边的变量。例如:int a = 5; a ^= 3;,这表示将a的值为53进行异或运算,再将结果6赋值给a

【异或(XOR)运算的特性

  • 0 XOR 0 = 0
  • 0 XOR 1 = 1
  • 1 XOR 0 = 1
  • 1 XOR 1 = 0
  • a被初始化为5,这在二进制中表示为101。然后,a ^= 3执行了异或运算。3在二进制中表示为011。所以,
  • 101 XOR 011 = 110
  • 这得到的结果在十进制中就是6,所以a的值最后被赋为了6。】

|=或等于运算符,将左边的值与右边的值进行按位或运算,并将结果赋值给左边的变量。例如:int a = 5; a |= 3;,这表示将a的值为53进行按位或运算,再将结果7赋值给a

【按位或运算符(|)在C语言中对两个二进制数的每一位执行逻辑或运算,即两个位中只要有一个为1,则结果位就为1

首先,我们看一下53的二进制表示:

5的二进制表示为: 101
3的二进制表示为: 011

使用按位或运算符对这两个数进行运算后,结果为:

101 | 011 = 111

将这个结果转换回十进制,我们得到7。因此,a |= 3的结果是7

>>=右移等于运算符,将左边的值进行右移位操作,并将结果赋值给左边的变量。例如:int a = 5; a >>= 1;,这表示将a的值为5向右移一位,再将结果2赋值给a

【右移运算符(>>把左操作数的二进制表示向右移动指定的位数,右边空出的位用0填充。对于数值5,其在二进制中的表示是101。当你执行a >>= 1时,5的二进制表示101被向右移动一位,变成010,这就是2的二进制表示。因此,a的值从5变为了2

<<=左移等于运算符,将左边的值进行左移位操作,并将结果赋值给左边的变量。例如:int a = 5; a <<= 1;,这表示将a的值为5向左移一位,再将结果10赋值给a

【向左移位运算符(<<是将左操作数的二进制表示向左移动指定数量的位,移动后空出的位用0填充。数值5的二进制表示是101。当你执行a <<= 1时,5的二进制表示101被向左移动一位,变成1010。这个二进制数转换回十进制就是10。因此,a的值从5变为了10

(5)单目操作符

!       逻辑反操作

-       负值  

+       正值

&       取地址

& 运算符是取地址运算符,用于获取变量的内存地址。例如:int a = 10; int *p = &a;,这里 &a 就表示获取变量 a 的内存地址,然后将这个地址赋值给指针 p

sizeof  操作数的类型长度(以字节为单位)

sizeof操作符用于计算变量、数据类型或对象的大小(以字节为单位)。这通常用于确定在内存中分配给特定变量或数据类型的空间大小。

~       对一个数的二进制位取反

操作符是对操作数的二进制位取反。它会将操作数中每个二进制位上的0变为11变为0

--      前置、后置—

++      前置、后置++

--  ++ 是前置和后置的自增自减运算符。它们的区别在于,前置版本先增加或减少然后再进行其他操作,后置版本先进行其他操作然后再增加或减少。例如:int a = 5; int b = --a;,这里 --a 表示先对 a 进行自减操作,然后赋值给 b,所以 a 的值变为4b 的值也变为4。而 int a = 5; int b = a--;,这里 a-- 表示先赋值给 b,然后再对 a 进行自减操作,所以 a 的值变为4,但 b 的值还是5

*       间接访问操作符(解引用操作符)

* 运算符是间接访问操作符,也称为解引用操作符。它用于获取指针指向的实际值。例如:int a = 10; int *p = &a; int c = *p;,这里 *p 表示获取指针 p 所指向的变量的值,即 a 的值,然后赋值给 c,所以 c 的值为10

(类型)  强制类型转换

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

 int arr[10]={0};

 printf("%d\n",sizeof(arr));

  printf("%d\n",sizeof(arr[0]));

  int n=sizeof(arr)/sizeof(arr[0]);

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

   return 0;

}

1按位取反运算符 ~ 会将操作数的每个位取反,即将0变为1,将1变为0。对于有符号整数,取反操作将应用补码表示。因此,如果变量 a 的初始值是 1,则它的补码表示为 0000 0000 0000 0001。取反后的结果为 1111 1111 1111 1110,转换为十进制为 -2。所以,第一个 printf 语句输出的结果为 -2

对于变量 b 的初始值 0,它的补码表示为 0000 0000 0000 0000。取反后的结果为 1111 1111 1111 1111,转换为十进制为 -1。所以,第二个 printf 语句输出的结果为 -1

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

int a=1;

int b=0;

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

printf("%d\n",~b);

return 0;

}

 2int b = a++,这是一个后置递增运算符的使用。后置递增运算符会先使用变量 a 的值,然后再将其递增。int q = ++p,这是一个前置递增运算符的使用。前置递增运算符会先将变量 p 的值递增,然后再使用递增后的值。

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

int a=10;

int b=a++;  //后置++,先用后+

int p=100;

int q=++p;  //前置++,先+后用

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

printf("%d\n",b);

printf("%d\n",p);

printf("%d\n",q);

return 0;

}

 3、强制转换:强制类型转换会截断浮点数的小数部分

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

       int a = (int)3.14;  //强制类型转换

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

       return 0;

}

(6)条件操作符(三目操作符)

1、使用三目运算符(?:)进行条件判断,语法为 condition ? expression1 : expression2。如果 condition 条件为真,则表达式的值为 expression1;如果 condition 条件为假,则表达式的值为 expression2。在这里,判断条件是 a > b,即变量 a 是否大于变量 b。如果条件成立,即 a 大于 b,那么表达式的值为 a;否则,表达式的值为 b

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

       int a = 10;

       int b = 100;

       int max = 0;

       /*if (a > b)

              max = a;

       else

              max = b;*/

       max = a > b ? a : b;

       printf("%d\n", max);

       return 0;

}

 2变量的赋值使用了逗号运算符,该运算符会逐个执行表达式,并返回最后一个表达式的结果。逗号运算符的执行顺序是从左到右。每个表达式都会被计算,并依次执行。

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

  int a=15;

  int b=20;

  int c=30;

  int d=(a=b+5,b=c-7,c=a-3); //逗号表达式从左往右计算,呈现最后一个表达式结果

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

  return 0;

}

(7)下标引用、函数调用和结构成员

下标引用操作符 [] 用于访问数组中特定位置的元素

 #define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

 int arr[10]={0,1,2,3,4,5,6,7,8,9};

 printf("%d\n",arr[7]);  //[]就是下表引用操作符

 printf("haha\n");       //函数后的()就是函数调用符

 return 0;

 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值