admin管理员组

文章数量:1794759

【C语言】操作符(上)

最近准备期末考试,好久不见啦,现在回归——

正文开始——

1. 操作符的分类

  • 算术操作符 :+、-、*、/、%
  • 移位操作符 :<< 、>>
  • 位操作符 : & 、 | 、 ^
  • 赋值操作符 : = 、+=、-=、*=、/=、%=、<<=、>>==、&=、!=、^=
  • 单目操作符 :!、++、--、&、*、+、-、~、sizeof、(类型)
  • 关系操作符 : >、>=、<、<=、==、!=
  • 逻辑操作符 : &&、||
  • 条件操作符 : ? :
  • 逗号操作符 : ,
  • 下表引用 : [ ]
  • 函数调用:()
  • 结构成员访问:. 、->

2. 原码、反码、补码

【重点】

整数的2进制表示方法有三种:原码、反码、补码。

有符号整数的三种表示方法均有符号位数值位两部分,2进制序列中,最高位的1位是被当做为符号位,剩余的都是数值位。

符号位都是用0表示 “正”,1表示 “负”。

正整数的原、反、补码都相同。

负整数的三种表示方法各不相同。

原码 :直接将数值按照正负数的形式翻译成二进制得到的就是原码。

反码 :将原码的符号位不变,其它位依次按位取反就可以得到反码。

补码 :反码+1得到补码。

补码——>原码 :取反,+1。

对于整形来说,数据是以 补码 的形式存放在内存中的。

why?

在计算机系统中,数值一律用补码来表示和存储。因为,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码和原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

3. 移位操作符

<< 左移操作符

>> 右移操作符

【注】移位操作符的操作数只能是整数。

3.1 左移操作符

移动规则:左边抛弃,右边补0(移动的是存储在内存中的二进制位)

3.2 右移操作符

移动规则:右移运算分两种

  1. 逻辑右移:左边用0填充,右边丢弃
  2. 算术右移:左边用原该值的符号位填充,右边丢弃

【注】对于移位操作符,不要移动负数位,这个是标准的未定义的。

例如:

代码语言:javascript代码运行次数:0运行复制
1   int num = 0;
2   num >> -1;

4. 位操作符:& 、| 、^ 、~

& 按位与 | 按位或 ^ 按位异或 ~ 按位取反

【注】它们的操作数必须是整数。

练习1:不能创建临时变量(第三个变量),实现两个整数的交换。

5. 单目操作符

单目操作符见下

!、++ 、-- 、& 、* 、+ 、- 、~ 、sizeof 、(类型)

6. 逗号表达式

1 exp1,exp2,exp3,...expN

逗号表达式,就是用逗号隔开的多个表达式。

逗号表达式,从左向右依次执行。表达式的结果是最后一个表达式的结果。

代码语言:javascript代码运行次数:0运行复制
代码1
1   int a=1;
2   int b=2;
3   int c=(a>b,a=a+b,a,b=a+1); //求 c 值

代码2
1   if(a=b+1,c=a/2,d>0)

代码3
a = get_val();
count_val(a);
while(a>0)
{
   //...
   a = get_val();
   count_val(a);
}
  
用逗号表达式改写如下
while(a = get_val(),count_val(a),a>0)
{
    //...

}

完——

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-07-26,如有侵权请联系 cloudcommunity@tencent 删除变量二进制内存硬件存储

本文标签: C语言操作符(上)