怎样做寻亲网站志愿者,湖北响应式网页建设哪家有,广州市企业网站建设平台,焦作做网站哪家好前言小伙伴们大家好#xff0c;随着对c的不断学习今天我们将来学习操作符。在初始c语言中也介绍过操作符但也只是点到即可#xff0c;今天我们将详细了解操作符。操作符分类#xff1a;算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号…前言小伙伴们大家好随着对c的不断学习今天我们将来学习操作符。在初始c语言中也介绍过操作符但也只是点到即可今天我们将详细了解操作符。操作符分类算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下表引用函数调用和结构成员算术操作符算术操作符都有哪些呢让我们一起来看看吧。算术操作符包括 - * / %.在数学中乘号是X,但是在c语言中乘号是用*来表示的。同样的还有除号也与数学中的写法不一样。同时还要注意的两个点第一当除号两端都是整数时执行的是整数除法结果也是整数除号有一端是小数时执行小数除法所得的结果也是小数的形式。第二个值得注意的点就是%%是取模也被称之为取余。%的两端只能是整数不能是小数当%的两端有一端是小数时编译器会报错并提示有小数的一端非法位移操作符操作符移动的是二进制位此时不得不先提整数的二进制表示形式。以int a -3为例int 是4个字节一个字节是八个比特位所以此时a的二进制位有32位10000000000000000000000000000000011。整数的二进制表示形式有三种:原码反码补码。还是以a为例此时a的原码为10000000000000000000000000000000011。反码最高位不变其余位进行按位取反此时a的反码为11111111111111111111111111111100,。补码在反码的基础上进行加1此时a的补码为11111111111111111111111111111101.需要注意的是正整数的原码反码补码都是一样的而负整数的原码反码补码需要进行计算得出。可能有小伙伴要问了为啥我们非得要补码呢原码不可以直接用吗我们要求补码是因为整数在内存中的存储是以补码的形式。左移操作符左移操作符移的是二进制的是二进制位a的二进制位是000000000000000000000000000000011把a的二进制位向左移一格舍弃左边右边补0此时我们会得到b的二进制位000000000000000000000000000000110b的值为6.上代码简单归纳左移操作符的使用方法是舍弃左边右边补0.右移操作符左移操作符移的是二进制位同样右移操作符移的也是二进制位。不过右移操作符分为两种一种是逻辑右移另一种是算术右移。逻辑右移右边丢弃左边直接用0填充。算术右移右边丢弃左边原来的符号位填充。在代码中是使用算术右移还是逻辑右移这是由编译器决定的。不过一般都是使用算术右移。从这里可以看出实现的是算术右移。那我们来分析一下倘若进行逻辑右移时又会有什么不同呢让我们一起来看看吧。a-3,其二进制位原码为10000000000000000000000000000011反码最高位不变其余位进行按位取反得到11111111111111111111111111111100补码在反码的基础上加一得到11111111111111111111111111111101。当a按照算术右移来移动已为时右边丢弃左边直接补0得到补码为01111111111111111111111111111110 。补码减一取反得到原码:00000000000000000000000000000010此时得到a1的值为2.不管是左移操作符还是右移操作符移动的都是整数一定不能是小数。同时移动整数时一般移动的都是正整数。直接上代码来看看效果吧。当a左移的是一个负数时编译器会发出警告同时运行结果是一个负数这里我们需要注意位移操作符移动的是整数且是正整数位操作符位操作符的分类按位与按位或|按位异或^。不管是按位与还是按位或还是按位异或中的位都是二进制位按位与按位与简单来说就是,有0则0.用代码来理解吧按位或|按位或简单来说有1则为1.依旧是用代码来理解吧按位异或^按位异或的使用方法相同为0相异为1.依旧是用代码理解来利用按位异或的知识来写一道题吧。题目要求为不使用临时变量来交换两个变量的值。在之前的学习中交换两个变量的值我们会通过使用临时变量。但这题的要求是不使用临时变量。第一种解决方法#includestdio.h
int main()
{int a 3;int b 5;printf(a%d b%d\n, a, b);a a b;//a8b a - b;//b8-35;a a - b;//a8-53;printf(a%d b%d\n, a, b);return 0;
}此时达到了交换变量值的目的但是这种代码存在问题。当a和b的值非常大时ab的结果容易溢出。这种方法还是不太好。第二种方法利用按位异或来进行解决#includestdio.h
int main()
{int a 3;int b 5;printf(a%d b%d\n, a, b);a a ^ b;b a ^ b;a a ^ b;printf(a%d b%d\n, a, b);return 0;
}利用按位异或可以达到交换变量的效果。那可能又有小伙伴要问了为啥会这样呢接下来就让我们一起来分析分析吧 a的二进制位00000000000000000000000000000011 b的二进制位00000000000000000000000000000101 第一次按位异或得到a的值这个值作为交换变量值的桥梁a^b的结果为00000000000000000000000000000110aa^b,此时a的值为6再进行按位异或得到b的值ba^b::00000000000000000000000000000011 ,b的值为3最后进行一次按位异或得到a的值aa^b:00000000000000000000000000000101,a的值为5.赋值操作符赋值操作符这里要注意区别与。是赋值操作符是判断相等。赋值操作符可以改变变量之前的值 double salary 10000.0;salary 20000.0//使用赋值操作符进行赋值int weight 110;weight 90;//对体重不满意就可以赋值复合赋值 : a ab;可以改成ab; - : aa-b可以改成a - b; / aa/b可以改为a/b%: aa%b可以改为a%b;: aa1改为a1 : aa1改为a1 : aab改为ab; | : aa|b改为a|b;^: aa^b改为a^b;单目操作符单目操作符的分类逻辑反操作符自增操作符--自减操作符取地址操作符*解引用操作符~对一个二进制位进行按位取反正值-负值sizeof操作数类型大小单位为字节类型强制类型转化逻辑反操作符逻辑反操作符例如a1为真是那么a为假。倘若b0时为假那么b为真自增操作符自增操作符分为前置和后置。前置先加加再使用后置加加先使用再加加。直接上代码来康康它们的区别吧int main()
{int a 10;int b a;printf(a%d,b%d , a, b);//a11,b10return 0;
}int main()
{int a 10;int b a;printf(a%d,b%d , a, b);//a11,b11return 0;
}--自减操作符--自减操作符也分为前置--和后置--.前置减减先减减再使用后置减减先使用再减减。上代码int main()
{int a 10;int b --a;printf(a%d,b%d , a, b);//a9,b9return 0;
}int main()
{int a 10;int b a--;printf(a%d,b%d , a, b);//b10,a9return 0;
}取地址操作符取地址操作符可以取出变量或者数组的地址然后把地址放在指针变量中存储起来。int main()
{int a 10;int * pa a;printf(%p , pa);return 0;
}此时可以通过pa找到a的地址int main()
{int arr[] { 1,2,3,4,5,6,7,8,9 };printf(%p , arr);return 0;
}*解引用操作符解引用操作符通常和取地址操作符搭配使用int main()
{int a 10;int* pa a;*pa 20;printf(%d , a);return 0;
}把a的地址放在指针变量pa中再通过解引用操作符对pa进行解引用操作。*pa就相当于是a~对二进制位进行按位取反直接上代码来康康吧int main()
{int a -3;//原码10000000000000000000000000000011;//反码11111111111111111111111111111100//补码11111111111111111111111111111101a ~a; //~a;000000000000000000000000000000010printf(%d , a);return 0;
}sizeof操作数类型的大小sizeof用来计算所占空间大小单位为字节不但可以计算变量的大小还可以计算数组大小。让我们一起来看看代码吧int main()
{int a 10;printf(%d\n, sizeof(a));printf(%d\n, sizeof(int));int arr[10] { 1,2,3,4,5,6,7,8,9,0 };printf(%d\n, sizeof(arr));printf(%d\n, sizeof(int[10]));return 0;
}类型强制类型转化操作符这种出现了一个警告从double转化到int 可能丢失数据。此时有两种解决办法第一种将int a 改为double a.把a的类型改为浮点型。第二种方法在10.0/3之前放一个int将结果转化为整形以上就是操作符详解的上篇欲知下事如何请听下回分解。操作符详解下篇正在准备中。创作不易还望各位大佬们点赞么么哒