【C语言】算数操作符 移位操作符 以及 sizeof单目操作符讲解

本文介绍了C语言中的算术操作符,包括+、-、*、/和%,强调了%操作符仅适用于整数以及整数除法的区别。接着详细阐述了移位操作符,包括左移(<<)和右移(>>),讨论了移位规则以及负数移位的未定义行为。最后,解释了sizeof操作符的用途,它用于计算变量或类型的内存大小,不参与实际运算。示例代码展示了sizeof在不同情况下的应用。
摘要由CSDN通过智能技术生成


操作符介绍:
C语言操作符分为: 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员下面我们就一一对这些操作符进行讲解介绍:

1.算术操作符

+ - * / %

  1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
  2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就 是浮点数除法。
  3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

2. 移位操作符

移位操作符,移动的是二进制位
对于整数的二进制有3中表示形式:原码、反码、补码
正整数 - 原码、反码、补码相同
负整数
原码 - 直接按照数字的正负写出的二进制序列
反码 - 原码的符号位不变,其他位按位取法得到的 (正数的符号位是0,负数的符号位是 1
补码 - 反码+1
整数 在内存中存储的是二进制的补码

<< 左移操作符
>> 右移操作符

2.1 左移操作符

移位规则:左边抛弃、右边补0
在这里插入图片描述
正数左移:
在这里插入图片描述
在这里插入图片描述

负数左移:
在这里插入图片描述
在这里插入图片描述
左移列子如上图,举列子更容易理解。

2.2 右移操作符

移位规则:首先右移运算分两种:

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

在这里插入图片描述

警告⚠ :
对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:

int num = 10;
num>>-1;//error

3.sizeof 单目操作符介绍

sizeof 是操作符,不是函数
sizeof 是计算变量或者类型创建变量的内存大小,单位是和内存中存放什么数据没有关系
sizeof 内部的表达式不参与运算

列如代码:

int main()
{
    int   a = 5;
	short s = 10; 
	printf("%d\n", sizeof(s = a + 2)); //这里s的值属性虽然被赋成7,但是以及是short类型
	printf("%d\n", s);  // s依旧是一开始赋的10,并没有因为sizeof内部改变而改变                
	return 0;
}

在这里插入图片描述
再给出一个很好的列子:

#include <stdio.h>
void test1(int arr[])
{
	printf("%d\n", sizeof(arr));  //实参传入函数的是指针,所以大小是 4 byte (32位平台)
}
void test2(char ch[])
{
	printf("%d\n", sizeof(ch));  //实参传入函数的是指针,所以大小是 4 byte(32位平台)
}
int main()
{
	int arr[10] = { 0 };
	char ch[10] = { 0 };
	printf("%d\n", sizeof(arr)); // 十个整型元素,结果是 40 byte
	printf("%d\n", sizeof(ch));  //  十个字符型元素,结果是 10 byte
	test1(arr);
	test2(ch);
	return 0;
}

这里的结果为:在这里插入图片描述

以上就是几个需要注意的操作符易错点,如果觉得文章对自己有帮助,欢迎大家点赞收藏~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值