【C语言】操作符学习笔记

引言

C语言的操作符其实是比较多的,正是因为有了这些操作符才使得C语言更加的灵活和完善,但是注意,该篇的学习笔记并不是操作符认知教程,仅适合操作符有大概了解的同学,请酌情观看。

正文

除法操作符的两个操作数都是整数的话,执行的是整数除法
除法操作符的两个操作数只要有一个浮点数,执行的是小数除法
取模操作符的操作数必须是整数
移位操作符移动的是二进制的位 数据的二进制表示
 << 左移操作符         >> 右移操作符
整数的二进制表示形式有3种:原码,反码,补码。
原码:把一个数按照正负直接翻译成二进制就是原码
正整数的原码,反码,补码是相同的。
负整数的原码,反码,补码是要计算的
反码:原码的符号位不变,其他位按位取反就是反码
补码:反码+1
例如-5:
10000000000000000000000000000101 - 原码
11111111111111111111111111111010 - 反码
11111111111111111111111111111011 - 补码
整数在内存中存储的是:补码
右移操作符:算术右移,逻辑右移
算术右移:右边丢弃,左边用原来的符号位来填充
逻辑右移:右边丢弃,左边直接用0填充
位操作符 位是二进制位

按位异或 - 对应的二进制位,相同为0,相异为1
不创建临时变量,实现两个数的交换

 ~ 对一个数的二进制按位取反
sizeof单独放数组名计算整个数组大小
&& || 逻辑与 逻辑或只关注真假

||左边为真不再计算
&&左边为假不再计算
,运算符:取最后一个表达式的值作为逗号表达式运算的结果
优先级:从高到低顺序是:++  、 = 、 ,
浮点数不能左移右移操作符

[]是下标引用操作符
函数调用操作符()
结构成员访问操作符

对照代码:

//int main()
//{
//	int a = 3;
//	int b = -5;
//	int c = a & b;
//	return 0;
//}
//按位异或 - 对应的二进制位,相同为0,相异为1
//不创建临时变量,实现两个数的交换
//a^a=0
//0^a=a
//3^3^5=5
//3^5^3=5

//int main()
//{
//	int a = 3;
//	int b = 5;
//	/*a = a + b;
//	b = a - b;
//	a = a - b;*/
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//	return 0;
//}

//int main()
//{
//	int a = 10;
//	printf("%d\n", sizeof(a));
//	printf("%d\n", sizeof(int));
//	return 0;
//}
// ~ 对一个数的二进制按位取反
//sizeof单独放数组名计算整个数组大小
//&& || 逻辑与 逻辑或只关注真假

//int main()
//{
//	int i = 0, a = 0, b = 2, c = 3, d = 4;
//	i = a++ && ++b && d++;
//	//i=a++||++b||d++
//	printf("a=%d\nb=%d\nc=%d\nd=%d", a, b, c, d);
//	return 0;
//}
//||左边为真不再计算
//&&左边为假不再计算
//,运算符:取最后一个表达式的值作为逗号表达式运算的结果
//优先级:从高到低顺序是:++  、 = 、 ,
//浮点数不能左移右移操作符

//int main()
//{
//    int a, n, b, i;
//    scanf_s("%d", &a);
//    for (i = 0; i < 32; i++)
//    {
//        if (a & (i >> 1))
//        {
//            b++;
//        }
//    }
//    printf("%d", b);
//        return 0;
//}

//int main()
//{
//    int x = 0;
//    int y = 0;
//    int count = 0;
//    scanf("%d %d", &x, &y);
//
//    for (int i = 0; i < 32; i++)
//    {
//        if (((x >> i) & 1) != ((y >> i) & 1))
//        {
//            count++;
//        }
//    }
//    printf("%d", count);
//
//    return 0;
//}

[]是下标引用操作符
函数调用操作符()
结构成员访问操作符

int main()
{
	int len = strlen("abc");//()
	printf("%d", len);
	return 0;
}
struct S
{
	int num;
	char c;
};

void test(struct S* ps)
{
	printf("%d\n", (*ps).num);
	printf("%c\n", (*ps).c);
//-> 结构成员访问操作符
	//结构体指针->结构体成员
	printf("%d\n", ps->num);
	printf("%c\n", ps->c);
}

int main()
{
	struct S s = { 100,'b' };//结构体的初始化使用{}
	//打印结构中的成员数据
	printf("%d\n", s.num);
	printf("%c\n", s.c);
	// . 操作符	结构体变量.结构体成员名
	return 0;
}
表达式求值
隐式类型转换
整形提升
按照变量的数据类型的符号位来提升
无符号提升直接补零

int main()
{
	char a = 3;
	//00000000000000000000000000000011
	//00000011 -截断
	char b = 127;
	//00000000000000000000000001111111
	char c = a + b;
	//00000000000000000000000000000011
	//00000000000000000000000001111111
	//00000000000000000000000010000010
	//10000010
	printf("%d", c);
	//11111111111111111111111110000010
	//11111111111111111111111110000001
	//-126
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值