操作符详解(进制,原反补码,各类操作符,逗号表达式,表达式求值……)

1.进制

十进制(0~9)

二进制(0~1)
余0进1

十进制转二进制:十进制除以二进制的余数(从下往上排列)

八进制(0~7)
第一位是0

十六进制(0~F)
前两位是0X
#2. 整数的二进制表示方法
构成:符号位+数值位(0表示正,1表示负)

3.原码反码补码

整形占用4个字节,即32个比特位
对于整数来说,内存中存放的是补码
正整数的原反补码都相同

反码:原码的符号位不变,其他位按位取反
补码:反码+1
在这里插入图片描述

4.移位操作符

移位操作符的操作数只能是整数

<<左移操作符:左边抛弃,右边补0
在这里插入图片描述
>>右移操作符

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

在这里插入图片描述

5.位操作符

注:程序以补码的形式存储在内存中,十进制%2得到二进制的最低位;/2可去掉最低位,0为假,非零为真

&(按位与) 对应二进制位,有0则为0,两个同时为1才为1

a&1可以得到最低位是几

|(按位或),对应二进制位有1则为1,两个同时为0才为0
^(按位异或)对应二进制位上,相同为0,相异为1;异或支持交换律
~按位取反操作符:对应二进制位上,全部取反,包括符号位,0变1,1变0,得到补码

异或操作具有局限性:
1.只能作用于整数交换
2.代码的可读性差
代码的执行效率低于使用第三个变量的方法

a^a=0
0^a=a

正整数的原码,反码和补码都相同
负整数以补码的方式存在内存中

int main()
{
	int num = -3;
	int num2 = 5;
	//num1:10000000000000000000000000000011[原码】(需要换成补码)
	//反码:11111111111111111111111111111100
	//补码:11111111111111111111111111111101
	//num2:00000000000000000000000000000101
	int a = num & num2;
	//a=00000000000000000000000000000101=5
	int b = num | num2;
	//b=   11111111111111111111111111111101
	//反码:11111111111111111111111111111100
	//原码:10000000000000000000000000000011=-3
	int c = num ^ num2;
	//c=   11111111111111111111111111111000
	//反码:11111111111111111111111111110111
	//原码:10000000000000000000000000001000=-8
	printf("%d\n%d\n%d\n", a, b, c);
	return 0;
}

求一个整数存储在内存中的二进制中的1的个数

在这里插入图片描述

6.逗号表达式

逗号表达式的优先级是最低的,从左向右依次执行,整个表达式的结果是最后一个表达式的结果

int main()
{
	int a = 0;
	int b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);
	//a>b为假,继续向后执行;a=b+10即a=12;a=12;b=13;即c=13
	printf("%d\n", c);
	return 0;
}

7.下标访问,函数调用

[]下标引用操作符

int arr[10]
printf("%d",arr[9]);//打印下标是9的元素,操作数是arr和 9

()函数调用操作符:最少一个操作数

int ret=Add(2,3);
//()的操作数是Add,2,3

sizeof不是函数,是操作符

8.优先级

先算优先级高的

由高到低排列:
在这里插入图片描述

9.表达式求值

表达式求值之前要进行类型转换,当表达式的值转换到适当的类型才开始计算

整型提升

C语⾔中整型算术运算总是⾄少以缺省(int )整型类型的精度来进⾏的。

有符号整数:一位(符号位)+31位数值位【符号位是1表示负数】【符号位是0表示正数】
无符号整数,没有符号位,32位都是数值位

如何进⾏整体提升呢?

  1. 有符号整数提升是按照变量的数据类型的符号位来提升的(vs中默认char类型是有符号位的)【前面补符号位】
  2. ⽆符号整数提升,⾼位补0

10.算术转换

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值