在终端运行时消除输入空格对程序的影响可以使用{在scanf后加“getchar()”或者在scanf(“空格%d”,&a)}
按位与和移位操作符只能用于整数且都要转位二进制后进行相应操作
不创建临时变量,实现两个数的交换:1——使用加减法(缺陷交换的值大小只能整形的最大值范围内);2——使用异或的方式
求二进制里“1”的个数可以使用先%2再/2的方法最后count++,便可以计算得出
单目操作符
if(a)
{
printf("为真的时候打印”);
}
if(!a)
{
printf("为假打印”);
}
sizeof在使用中面临的问题:sizeof(int)此时的括号不能省略,sizeof(a)可以把括号去掉,加空格就好。
sizeof中的表达式不参与运算,按原来的值进行计算
按位取反:~
按位与:|
void test1(int arr[])
{
printf("%d\n", sizeof(arr));//算指针的大小(64位所以默认为8)
}
void test2(char ch[])
{
printf("%d\n", sizeof(ch));
}
int main()
{
int arr[10] = { 0 };
char ch[5] = { 0 };
printf("%d\n", sizeof(arr));//一个int中含有4个字节(40)
printf("%d\n", sizeof(ch));//一个char类型中含有1个字节
test1(arr);
test2(ch);
return 0;
}
如果是“||”左边为真右边不计算,如果是“&&”左边为假右边不计算。
三目操作符:表达式1?表达式2:表达式3;
如果表达式1为真将表达式2 赋值给相应的参数,如果为假则将表达式3赋值给参数
结构体类型函数:struct +函数名
结构体指针操作符:->具体应用:
#include <stdio.h>
struct str
{
//结构体包含两个操作符"." "->"
char name[20];
int age;
char id[20];
};
int main()
{
int a = 10;
struct str s1 = { "LL",19,"20233373"};
printf("%s\n",s1.name);
//用指针
struct str* ps = &s1;
printf("%d\n",(*ps).age);
//用箭头的方式
printf("%d\n",ps->age);
return 0;
}
在表达操作的过程中要进行的类型转换:
隐式类型转换——为了获得精度,表达式中的字符或短整型操作数在使用之前被转化为普通整形(又叫做整形提升——按照变量数据的类型进行提升)
原码就是符号位(第一位)不变其他为按位取反
CPU中计算char类型时需要转换为int后计算。
int main()
{
char a = 3;
//将a进行二进制转换,char类型里只有8个bit位,int里可以存32个
char b = 127;
//0111 1111,如果是int类型则前面还应该要补0,补到32个为止,截断的规则是从最低位开始倒数
char c = a + b;
printf("%d\n", c);
return 0;
//结果为-126,因为转化为二进制后求补码,反码和原码,最后对原码进行计算,
}
算数转换(隐式)
int main()
{
char a = 3;
//将a进行二进制转换,char类型里只有8个bit位,int里可以存32个
char b = 127;
//0111 1111,如果是int类型则前面还应该要补0,补到32个为止,截断的规则是从最低位开始倒数
char c = a + b;
printf("%d\n", c);
return 0;
//结果为-126,因为转化为二进制后求补码,反码和原码,最后对原码进行计算,
}