当前位置 : 主页 > 编程语言 > c语言 >

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

来源:互联网 收集:自由互联 发布时间:2023-10-08
1.进制 十进制(0~9) 二进制(0~1)余0进1 十进制转二进制:十进制除以二进制的余数(从下往上排列) 八进制(0~7)第一位是0 十六进制(0~F)前两位是0X#2. 整数的二进制表示方法构成

1.进制

十进制(0~9)

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

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

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

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

3.原码反码补码

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

反码:原码的符号位不变,其他位按位取反

补码:反码+1

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

4.移位操作符

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

<<左移操作符:左边抛弃,右边补0

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

>>右移操作符

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

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

5.位操作符

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

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

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

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

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

a^a=00^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的个数

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

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.优先级

先算优先级高的

由高到低排列:

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

9.表达式求值

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

整型提升

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

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

如何进⾏整体提升呢?

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

10.算术转换

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

上一篇:10.2 调试事件获取DLL装载
下一篇:没有了
网友评论