操作符使用

    xiaoxiao2022-07-05  168

    1. 写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1 程序原型: int count_one_bits(unsigned int value) { // 返回 1的位数 }

    #include<stdio.h> #include<Windows.h> #pragma warning (disable:4996) //方法一 int count_one_bits1(unsigned int n) { int count = 0; while (n) { if (n % 2 == 1)//检测比特位最低位 { count++; } n = n / 2;//二进制右移一位 } return count; } //方法2 int count_one_bits2(unsigned int n) { int i = 0; int count = 0; for (; i < 32; i++)//循环右移比特位,先检测最低比特位 { if (((n >> i) & 1) == 1)//与1按位与 { count++; } } return count; } //方法3 int count_one_bits3(unsigned int n) { int count = 0;//计数 while (n) { count++;//循环几次就有几个一 n = n & (n - 1); } return count; } int main() { int x = 0; scanf("%d", &x); int res = count_one_bits1(x); res = count_one_bits2(x); res = count_one_bits3(x); printf("二进制中1的个数=%d\n", res); system("pause"); return 0; }

    2.获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。

    #include<stdio.h> #include<Windows.h> #pragma warning (disable:4996) int main() { int num = 0; int i = 0; scanf("%d", &num); printf("偶数序列为:"); for (i = 31; i >= 0; i -= 2) { printf("%d ", (num >> i) & 1); } printf("\n"); printf("奇数序列为:"); for (i = 30; i >= 0; i -= 2) { printf("%d ", (num >> i) & 1); } printf("\n"); system("pause"); return 0; }

    3. 输出一个整数的每一位。

    #include<stdio.h> #include<Windows.h> #pragma warning (disable:4996) int print(int x) { if (x > 9) { print(x / 10); } printf("%d", x % 10); return 0; } int main() { int n; scanf("%d", &n); print(n); system("pause"); return 0; }

    4.编程实现: 两个int(32位)整数m和n的二进制表达中, 有多少个位(bit)不同? 输入例子: 1999 2299 输出例子:7  

    #include<stdio.h> #include<Windows.h> #pragma warning (disable:4996) int main() { int m = 0; int n = 0; int i = 0; int count = 0; printf("请输入两个整数:"); scanf("%d %d", &m, &n); for (i = 0; i < 32; i++) { if ((m & 1) != (n & 1)) { count++; } m = m >> 1; n = n >> 1; } printf("count=%d\n", count); system("pause"); return 0;

    5.总结c语言操作符:

    1.算数操作符:+ - * / %

    ①除了%操作外,其他的几个操作符可以作用于整数和浮点数

    ②对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法

    ③%操作符的两个操作数必须为整数。返回的是整除之后的余数。

    2.移位操作符:<< 左移操作符   >>右移操作符

    左移操作符 移位规则:左边抛弃,右边补0

    右移操作符 移位规则:①逻辑移位 左边用0填充,右边丢弃

    ②算数移位 左边用原该值的符号位填充,右边丢弃

    警告:对于移位操作符,不要移动负数位  int num=10; num>>-1 //error

    3.位操作符:

    &   按位与

    |    按位或  任何数和1按位或都是1

                                    0按位或都是它本身

    ^    按位异或  相异为真 任何数和0按位异或都是它本身

    4.赋值操作符

    5.复合赋值符:+= , -= , *=,/=,%=,>>= ,<<=, &=,|=, ^=

    6.单目操作符:!逻辑反操作(对真假进行转换),-  负值,+ 正值,& 取地址,

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

                                                                        sizeof a,sizeof int(error)

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

    --  前置、后置-- ,++  前置后置++, ①++a/--a(先对a进行自增/自减,然后再使用a)

    ②a++/a--(先对a先使用,再自增/自减)

     

    *  间接访问操作符(解引用操作符) ,(类型)强制类型转换 int a=9; float f=(float) a;

    7.逻辑操作符:结果只能是1或0,&& 逻辑与 (两个同时为真时结果为真)  ||逻辑或(至少有一个为真时结果为真)

    ①区分按位与和逻辑与:1&2->0  1&&2->1

    ②区分按位或和逻辑或:1|2->3    1||2->1

    //360笔试题 #include<stdio.h> int main() { int i=0,a=0,b=2,c=3,d=4; i=a++ && ++b && d++;//结果 1 2 3 4 //i=a++||++b||d++;// 结果 1 3 3 4 printf("a=%d\n b=%d\n c=%d\n d=%d\n",a,b,c,d); return 0; }

     

    8.条件操作符 :exp1?exp2:exp3

    9.逗号表达式:exp1,exp2,exp3,...expN  

    逗号表达式,就是用逗号隔开的多个表达式。逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

     10.下表引用、函数调用和结构体成员

    10.1 [ ]下表引用操作符  操作数:一个数组名+一个索引值 int arr[10]; //创建数组 arr[9]=10;//实用下标引用操作符 ,[ ]的操作数是arr和9

    10.2 ()函数调用操作符 接受一个或多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

    10.3 访问一个结构的成员:①.  结构体.成员名  ②->  结构体指针->成员名

    11.表达式求值

    表达式求值的顺序一部分是由操作数的优先级和结合性决定。

    同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。

    整型提升(难点重点):①表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU 去执行运算。

    ②如何进行整型提升?整型提升时,先看自身的类型 看有无符号位 有符号位高位补符号位  无符号位高位补0

    12.算数转换 :如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换

    long double,double,float,unsigned long int,long int,unsigned int  , int 如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算  

    13.操作符的属性 复杂表达式的求值有三个影响的因素。①操作符的优先级②操作符的结合性③是否控制求值顺序

    两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于它们的结合性。

     

     

     

     

     

     

     

    最新回复(0)