c语言(8)操作符的详解,二进制,八进制,十进制,十六进制及其转换。原码反码补码,位移操作符。逗号表达式,下标标访问,函数调用,优先级,结合性,整形提升

1、二进制的介绍

(1)二进制的意义

在计算机语言中2进制,8进制。10进制,16进制都是数值的表达方式
2进制中只有0,1,是满二进一
8进制中只有0~7,是满八进一(一般八进制前面要加0,比如:08,就默认是八进制)
10进制中只有0~9,是满十进一
16进制中只有0~f,满f进一(十六进制前则要加0x,比如:0xf,就默认是十六进制中的15)
但是计算机能识别的语言为2进制

(2)二进制的转换

各种进制的表达形式

二进制转换为十进制

在这里插入图片描述

十进制转换为二进制

有两种方法
第一种:
在这里插入图片描述

第二种:
在这里插入图片描述

2进制转换为8进制

在这里插入图片描述
(一般最高位如果是1就认为这个数是负数,是零就认为是正数,这里面默认是在int 形式下)
最终得数:0327

2进制转换为16进制

在这里插入图片描述
最终结果为0xc7

可以看到二进制转八进制是从右往左一次划分走三个数,而十六进制则是一次划分走四个数

2、原码、反码、补码

(1)原码,反码,补码的意义

不论原码还是反码又或者是补码,都是用1或0表示的,且原码反码补码的最高位是符号位,0代表正好,1代表负号,其他位则是数值位
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:原码的符号位不动,其他位置取反
补码:反码+1
注意:正数的原码反码补码都相同,负数才需要转化,并且一般运算是都是以补码的形式进行运算
想将补码转为原码,需要的还是取反+1

3、移位操作符

(1)<<左位移操作符

原则就是
所有数向左移动一位,左边空出来的用0补位
在这里插入图片描述

(2)>>右位移操作符

逻辑右移:
所有数向右移动一位,右边空出来的用0补位
在这里插入图片描述

算数右移:
所有数向右移动一位,右边空出来的用考被挤出来的数字
在这里插入图片描述

代码的表达形式:
int num=10;
num<<1;

4、位操作符&、|、^

& //按位与:有一个零都为零,只有另个都为1,才是1
| //按位或:有一个为1,都为1,否则为零
(和&& ||作用效果差不多)
^ //按位异或
(都是1则为0,都是0也为0,其他则为1)
注:三个运算符都只能用到整数上

练习题:在不创建第三个变量的情况下完成两个数的交换:
#include<stdio.h>
int main()
{
int a=10;
int b=20;
int a=a^b;
int b=a^b;
int a=a^b;
printf("a=%d,b=%d\n",a,b);
return 0;
}

5、逗号表达式

从左往右依次执行,主要作用是切割语句

6、下标访问[],函数调用()

1、下标访问:
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int arr[7]=7;
2、函数调用:

不同于下标访问,函数调用就是在()前写上要调用的函数名称

#include<stdio.h>
int test()//被调用的函数
{
printf("aaa");
}
int mian()
{
test();//在调用函数
return 0;
}

7、操作符的属性:优先级,结合性

(1)优先级

当存在多个运算符的时候会有优先算哪个的区别
比如:int a=b+cd;
就会因为
的优先级大于+,所以就优先算c*d,在算b+

(2)结合性

如果想打破优先级呢就可以利用(),就像数学中的运算一样
比如:int a=(b+c)*d;
这种情况下就需要优先算括号内的

(3)注意

有一些错误的运算格式尽量不要写,不要挑战系统
比如
a>b>c
c++ *—b
这种挑战系统的运算形式最好不要出现,多打两行代码

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值