#define _CRT_SECURE_NO_WARNINGS 1
操作符详解
#include<stdio.h>
int main()
{
int a = 5 / 2;// 商2余1
double b = 5 / 2.0; // 整数除法是不会得到小数的
// % 取模必须都是整数
printf("%d\n", a);
printf("%lf\n", b);
system("pause");
return 0;
}
移位操作符
int main()
{
int a = 16;
// >> -- 右移操作符
// 移动的是二进制位
int b = a >> 1;
printf("%d\n", b);
system("pause");
return 0;
}
右移是算术逻辑
即右边丢弃,左边保留符号位
int main()
{
int a = -1;
// 整数的二进制表示有: 原码、反码、补码
// 存储到内存的都是补码
// 10000000000000000000000000000001 - 原码
// 11111111111111111111111111111110 - 反码
// 11111111111111111111111111111111 - 补码
int b = a >> 1;
printf("%d\n", b);
system("pause");
return 0;
}
左移操作符
左边丢弃、 右边补0
int main()
{
int a = 5;
// << -- 左移操作符
// 移动的是二进制位
int b = a << 1;
printf("%d\n", b);
system("pause");
return 0;
}
逻辑操作符
& 按位与
| 按位或
^ 按位异或
int main()
{
int a = 3;
int b = 5;
//int b = -1; c=3 说明数据存储是以补码 / 正数原码与补码一致
int c = a&b;
int d = a|b;
int e = a^b;
printf("%d\n %d\n %d\n", c,d,e);
system("pause");
return 0;
}
不能创建临时变量
int main()
{
int a = 3;
int b = 5;
// 加减法 - 结果太大可能会溢出
//a = a + b;
//b = a - b;
//a = a - b;
// 异或办法 - a^a=0 a^0=a a^b=b^a
a = a^b;
b = a^b;
a = a^b;
return 0;
}
int main()
{
int num = 0;
int count = 0;
scanf("%d", &num);
// 32bit
int i = 0;
for (i = 0; i < 32; i++)
{
if (1 == ((num >> i) & 1))
count++;
}
// 统计num的补码中有几个1
//while (num) // 当num=-1时无法计算
//{
// if (num % 2 == 1)
// count++;
// num = num / 2;
//}
printf("%d\n", count);
system("pause");
return 0;
}
复合赋值符
a += 2 ---- a=a+2;
a+b --- + "双目操作符"
!a --- 真变成假 假变成真
int main()
{
//int a = 10;
//int* p = &a;// 取地址操作符
//*p = 20;// 解引用操作符|简介访问操作符 20 - a
//if (!a)
//{
// printf("hhee");
//}
int a = 10;
char c = 'c';
char* p = &c;
int arr[10] = { 0 };
//sizeof 计算变量所占内存空间的大小,单位是字节
printf("%d\n", sizeof(a));//4
printf("%d\n", sizeof(c));//1 | 计算c里面的内容
printf("%d\n", sizeof(p));//4 char地址
printf("%d\n", sizeof(arr));//40 10个int
system("pause");
return 0;
}
int main()
{
short s = 0; // short 短整型 , 2个字节
int a = 10;
printf("%d\n", sizeof(s=a+5)); //2
printf("%d\n", s); // 0
return 0;
}
int main()
{
//int a = 0;
//00000000000000000000000000000000
//~a
//11111111111111111111111111111111 - 补码
//11111111111111111111111111111110 - 反码
//10000000000000000000000000000001 - 原码
//printf("%d\n", ~a);
int a = 11;
a=a | (1 << 2);
printf("%d\n", a);
a = a&(~(1 << 2));
//00000000000000000000000000001011
//00000000000000000000000000000100
printf("%d\n", a); //~按位取反 // 二进制位 |-1
return 0;
}
int main()
{
int a = 10;
//printf("%d\n", ++a);// 前置++,先++ 后使用
printf("%d\n", a++); // 后置++,先使用,后++
return 0;
}
void test1(int arr[])
{
printf("%d\n", sizeof(arr));//4
}
void test2(char arr2[])
{
printf("%d\n", sizeof(arr2));//4 |因为是指针、指针存储以四个字节存储
}
int main()
{
int arr[10] = { 0 };
char arr2[10] = { 0 };
printf("%d\n", sizeof(arr));//40
printf("%d\n", sizeof(arr2));// 10
test1(arr);
test2(arr2);
return 0;
}
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
//i = a++&&++b&&d++;// a++ 先使用后++ / 左边只要有0,&&后边就不执行了
// 执行&&后 a=a+1 | 然后后边++b就不计算了,因为判断为假
i = a++ || ++b || d++;
printf("%d %d %d %d", a, b, c, d);//a=0 // 1 2 3 4
//若a=5 // 2 3 3 5
return 0;
}
条件操作符
三步操作符
int main()
{
int a = 10;
int b = 20;
//if (a > 5)
// b = 3;
//else
// b = -3;
b = (a > 5? 3: -3);
printf("%d\n", b);
return 0;
}
学生
struct Stu
{
char name[20];
int age;
char id[20];
};
int main()
{
int a = 10;
// 使用struct Stu这个类型创建了一个学生对象s1,并初始化
struct Stu s1 = {"张三",20,"2019099809"};
struct Stu* ps = &s1;
printf("%s\n", ps->name);
// 结构体指针-> 成员们
printf("%s\n", (*ps).name);
printf("%s\n", s1.name);
printf("%d\n", s1.age);
printf("%s\n", s1.id);
// 结构体变量.成员名
return 0;
}
隐式转换类型
int main()
{
char a = 3;
//00000000000000000000000000000011
//00000011 - a
char b = 127;
//00000000000000000000000001111111
//01111111 - b
// a和b如何相加
// 00000000000000000000000000000011
// 00000000000000000000000001111111
//=00000000000000000000000010000010
char c = a + b;
// 10000010 - c // 按高位补充
// %d 整型
// 11111111111111111111111110000010 - 补码
// 11111111111111111111111110000001 - 反码
// 10000000000000000000000001111110 - 原码
printf("%d\n", a);// a 和b 就是原码
printf("%d\n", b);
printf("%d\n", c);
return 0;
}
实例
int main()
{
char a = 0xb6;// 10110110 - 一个字节
short b = 0xb600;// 两个字节
int c = 0xb6000000;
if (a == 0xb6)// 比较也是运算符, a相当于FFFFFFb6
printf("a");
if (b == 0xb600)
printf("b");
if (c == 0xb6000000)
printf("c");
return 0;
}
int main()
{
char c = 1;
printf("%u\n", sizeof(c));//1
printf("%u\n", sizeof(+c));//4 - 进行运算 - 整型
printf("%u\n", sizeof(!c));//1 !假 | !不是运算符, 用于字符,有字符变成空字符
return 0;
}
操作符 | 入门
最新推荐文章于 2024-09-15 11:40:06 发布
本文详细介绍了C语言中的各种操作符,包括算术、移位、逻辑、复合赋值等,并通过实例展示了它们的用法和效果。重点讨论了位操作符如按位与、按位或、按位异或以及左移、右移操作,并分析了它们在二进制运算中的作用。此外,还探讨了类型转换和条件操作符在编程中的应用。
摘要由CSDN通过智能技术生成