C语言初阶—操作符详解

**补充整形数据在内存中的存储 

在计算机中,整形数据被存储在内存中的连续的字节区域中。整型变量的大小取决于它的数据类型。通常,整型数据类型的大小可以是1个字节、2个字节、4个字节或8个字节。在内存中存储整型数据时,使用的是二进制表示法。例如,一个8位的二进制数可以表示0到255之间的整数值。

对于一个给定的整型变量,它在内存中的存储方式是按照字节顺序存储的。即整型变量中的最低字节存储在最低的地址处,最高字节存储在最高的地址处。这种方式称为小端存储方式。

例如,一个32位的整型变量0x12345678在小端存储方式下,它的存储顺序如下:

地址          存储值

0x1000       0x78
0x1001       0x56
0x1002       0x34
0x1003       0x12

在大端存储方式下,整型变量中的最高字节存储在最低的地址处,最低字节存储在最高的地址处。但实际上,大端存储方式在现代计算机中已经很少使用了。

整数在计算机中有三种2进制表示方法,原码 反码 补码

三种表示方法均有符号位和数值位两部份。符号位都是用0表示正,用1表示负

例如:

1和-1在32位系统中的表达

00000000 00000000 00000000 00000001    1

111111111 111111111 111111111 111111111    -1

整形数据在内存中的存储是以二进制的补码在内存中存储的。

补码得到的步骤:

正数的原码 反码 补码是一样的

对于负数:

原码-->按位取得到反码-->反码—+1=补码

目录

**补充整形数据在内存中的存储 

1.算术操作符

1.1  /   

2.移位操作符(移位操作符移动的只能是整数)

2.1<< 左移操作符

2.2 >> 右移操作符

3.位操作符(操作二进制位,以二进制形式进行计算,操作数必须是整数)

3.1  & 按位与 

3.2  |  按位或(操作对象二进制整数) 

3.3  ^     按位异或 (操作对象为二进制整数)

4.赋值操作符 =

 5.单目操作符(只有一个操作数)

5.1 ! 逻辑反操作符

5.2  sizeof(操作数的类型长度(以字节为单位))

5.3 前置++、--,后置++、-- 

5.4 其他单目操作符

6.关系操作符

7.逻辑操作符

8.条件操作符

9.逗号表达式

10.下标引用、函数调用和结构成员

10.1 数组的下标引用操作符

10.2函数调用操作符  () 


1.算术操作符

+ - * /  %

2.% 得到余数

        1.除了%之外其他的操作符都可以作用于整数和浮点数

        2.%操作的两个数必须为整数,返回的是整除后的余数

1.1  /   

1.整数除法,除数两端都是整数

2.(小数)浮点数除法(除号两端只要有一个小数就执行浮点数除法)

        3. 除数不可以为0;

2.移位操作符(移位操作符移动的只能是整数)

2.1<< 左移操作符

规则:左边抛弃,右边补0

1在内存中的存储

00000000 00000000 00000000 00000001

将其左移一位

00000000 00000000 00000000 00000010

2.2 >> 右移操作符

关于右移操作符

1.逻辑移位

逻辑右移:

右边丢弃,左边直接补充0.

2.算术移位。

比如算术的逻辑右移:右边丢弃,左边补充原来的符号

注意:

C语言没有明确规定是算术右移还是逻辑右移,一般编译器采用的是算术右移。 

这里的 00000000 00000000 00000000 00000111 因为是正数,原码 反码 补码都一样就直接计算打印结果。如果是负数还需要转化为原码才可以计算出正确结果。

注意: 

对于移位运算符,不要移动负数位,对于C语言来说是标准未定义行为

3.位操作符(操作二进制位,以二进制形式进行计算,操作数必须是整数)

3.1  & 按位与 

按位与规则:对应二进制位上两个数只要有0就为0,两个全为1才是1。

附上源码大家体验一下:

int main()
{
	int a = 3;
	//正数,原码 补码 反码相同
	//00000000 00000000 00000000 00000011
	int b = -5;
	//原码: 10000000 00000000 00000000 00000101
	//原码符号位不变按位取反得到反码:11111111 11111111 11111111 11111010  ——反码  反码+1得要补码
	//  111111111 111111111 11111111 11111111 11111011   -5在内存中的补码 
	int c = a & b;
	//两个补码按位取反
	// 3-  00000000 00000000 00000000 00000011
	// -5- 11111111 11111111 11111111 11111011,规则,对应二进制位有0就都是0,都是1才是1
	//得到结果 00000000 00000000 00000000 00000011  这就是两个数按位取反得到的结果补码,
	//看符号位是正数,算出结果为3

	printf("%d\n", c);
	return 0;

3.2  |  按位或(操作对象二进制整数) 

 规则对应二进制位有1就为1,两个同时为0才是0.

沿用上例:

3.3  ^     按位异或 (操作对象为二进制整数)

 规则: 对应的二进制位相同为0,相异为1.

沿用上例:

4.赋值操作符 =

int weight = 120;

可以连续赋值

a = x = y+1;

x = y+1;

a = x;

复合赋值符:

+=      x+= 10   x = x+10;

-=

*=

/=

%=

>>=

&= 

 5.单目操作符(只有一个操作数)

5.1 ! 逻辑反操作符

将真变成假,假变成真

一般和if语句中判断条件处使用

if(i != 0)

5.2  sizeof(操作数的类型长度(以字节为单位))

1.sizeof计算的是类型,比如(sizeof(int))、创建变量的大小,单位是字节

2.sizeof是操作符不是函数

3.sizeof在计算创建的变量时可以不用加括号,这样证明了其不是函数。

看演示 

5.3 前置++、--,后置++、-- 

 前置++、--都是先使用变量的值过后在进行自加自减

后置++、--是先进行++、 

5.4 其他单目操作符

- 负值

+ 正值

& 取地址

~ 对一个数的二进制位按位取反

6.关系操作符

>

>= 

<=

!=

==

7.逻辑操作符

&& 逻辑与   并且

|| 逻辑或   或者

8.条件操作符

exp1?exxp2:exp3

用法:

判断exp1为真,就执行exp2,不管exp3

判断exp1为假,执行3,不管2

 附上源码大家体验效果

int main()
{
	int a = 0;
	scanf("%d", &a);
	int b = 0;
	/*if (a > 5)
	{
		b = 3;
	}
	else
	{
		b = -3;
	}*/
	//这段代码可以等值替换为条件操作符
	(a > 5)?( b = 3) :( b = -1);
	printf("%d", b);
	return 0;
}

9.逗号表达式

exp1,exp2,exp3,.......expn

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

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

10.下标引用、函数调用和结构成员

10.1 数组的下标引用操作符

不知道大家和我有没有一样的疑问:

在创建数组时,例如数组是10个元素:
int arr[10] = {0};

但是我们在使用数组的时候数组的下标只能最大到9.

原因:

int arr[10] //这是创建数组的形式

arr[9] = 10;这里的【】是下标引用操作符

10.2函数调用操作符  () 

接收一个或者多个操作数:

第一个操作数是函数名

剩余的操作数是函数的参数

(比如scanf函数的参数就是自增长类型,用户输入多少个就是多少个参数)

最低是一个操作数,因为函数可以没有参数。

以上就是C语言操作符的总结,大家可以重点看一下展开讲解的内容,没有展开讲解的内容就去了解用法就OK。欢迎大家指正。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值