C语言学习3--20231106

目录

一、操作符(续)

1、按位取反~原码、反码、补码

2、前置++a、后置a++(--)

3、(类型)强制类型转换

4、条件操作符---exp1?exp2:exp3(三目操作符)

5、逗号表达式----exp1,exp2,exp3

6、下标引用、函数调用和结构成员[]        ()        .        ->


一、操作符(续)

#include <stdio.h>
//#include <stdlib.h>
#include<string.h> //有此句以后不会出现警告 

int main()
{

    int a=10;
    int arr[]={'a',2,3,4,5,'e'};
    printf("%d\n",sizeof(a));
    printf("%d\n",sizeof(arr));
    
    return 0;
}

#include <stdio.h>
//#include <stdlib.h>
#include<string.h> //有此句以后不会出现警告 

int main()
{ 
	int a=10;
	int arr[]={'a',2,3,4,5,'e'};
	printf("%d\n",sizeof(a));
	printf("%d\n",sizeof(arr));
	
	return 0;
}

1、按位取反~原码、反码、补码

原码、反码、补码

只要是整数,内存中存储的都是二进制的补码

正数---原码、反码、补码  相同

负数---

原码直接按照

有符号数

任何数字都存的是补码,反码只是中间的计算状态

    int a=0;   //整型占用四个字节,32个bit位 
    int b=~a;//b是有符号的整型,最高位一般表示符号 
    //~按(二进制)位取反 
    //a===> 00000000000000000000000000000000
    //b===> 11111111111111111111111111111111
    //原码、反码、补码
    //原码-->反码:符号位不变,其他位按位取反得到饭吗,反码+1=补码 
    //负数在内存中存储的时候,存储的是二进制的补码 
    //11111111111111111111111111111111(补码) 
    //11111111111111111111111111111110(反码) 
    //1000000000000000000000000001(原码) 
    printf("%d\n",b);//结果是-1---打印的是这个数的原码 
 

#include <stdio.h>
#include<string.h> //有此句以后不会出现警告 

int main()
{
	int a=0;   //整型占用四个字节,32个bit位 
	int b=~a;//b是有符号的整型,最高位一般表示符号 
	//~按(二进制)位取反 
	//a===> 00000000000000000000000000000000
	//b===> 11111111111111111111111111111111
	//原码、反码、补码
	//原码-->反码:符号位不变,其他位按位取反得到饭吗,反码+1=补码 
	//负数在内存中存储的时候,存储的是二进制的补码 
	//11111111111111111111111111111111(补码) 
	//11111111111111111111111111111110(反码) 
	//10000000000000000000000000000001(原码) 
	printf("%d\n",b);//结果是-1---打印的是这个数的原码 

	return 0;
}

2、前置++a、后置a++(--)


int main()
{
    int a1=10;
    int a2=12;
    int b=a1++;//后置++,先赋值后自增1
    int c=++a2;//前置++,先自增1后赋值 
    printf("a1=%d b=%d a2=%d c=%d\n",a1,b,a2,c);
    return 0;
}


int main()
{
	int a1=10;
	int a2=12;
	int b=a1++;//后置++,先赋值后自增1
	int c=++a2;//前置++,先自增1后赋值 
	printf("a1=%d b=%d a2=%d c=%d\n",a1,b,a2,c);
	return 0;
}

3、(类型)强制类型转换

    int a=(int)3.14;//有的不需要强制转换也可以

一般不建议使用强制类型转换

#include <stdio.h>
#include<string.h> //有此句以后不会出现警告 

int main()
{
	int a=(int)3.14;
	printf("%d\n",a);
	return 0;
}

二、关系操作符

3b59a38590ce4575b9690038e968bd6c.png

三、逻辑操作符

8387e31821bd47008497677639e8ba86.png

&&逻辑与全部为真才为真--1

注意区别&①scanf:&取地址

②&按位与(二进制)--两个真才真

只要有一个为假则为假--0
||逻辑或只要有一个就为真~输出为1注意区别|:按位或--一个为真即真
全都为假才为假~输出为0

#include <stdio.h>
#include<string.h> //有此句以后不会出现警告 
int main()
{
	//true真--非0 
	//false 假--0
	//&&--逻辑与
	//||--逻辑或 
	int a=0;
	int b=2;
	int c=a&&&b;//注意区分&按位与--全部为真才为真 
	int d=a||b;
	printf("c=%d\nd=%d",c,d); //0,1
	return 0;
}

4、条件操作符---exp1?exp2:exp3(三目操作符)

#include <stdio.h>
#include<string.h> //有此句以后不会出现警告 
int main()
{
    int a=10;
    int b=20;
    int c=0;
    printf("%d\n",a>b?a+b:a-b);
    return 0;
}

5、逗号表达式----exp1,exp2,exp3

,

6、下标引用、函数调用和结构成员[]        ()        .        ->

[]        ()        .        ->

#include <stdio.h>
#include<string.h> //有此句以后不会出现警告 
int Add(int x,int y)
{
    int z=0;
    z=x+y;
    return z;
}
int main()
{
    int arr[10]={0};
    arr[4];
    int a=10;
    int b=20;
    int sum=Add(a,b);//函数调用操作符 
    printf("%d\n",sum);
    
    return 0;
}

#include <stdio.h>
#include<string.h> //有此句以后不会出现警告 
int Add(int x,int y)
{
	int z=0;
	z=x+y;
	return z;
}
int main()
{
	int arr[10]={0};
	arr[4];
	int a=10;
	int b=20;
	int sum=Add(a,b);//函数调用操作符 
	printf("%d\n",sum);
	
	return 0;
}

&、*、.、->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值