首页 > 其他分享 >C语言学习笔记(03)——常用运算符

C语言学习笔记(03)——常用运算符

时间:2024-07-10 10:12:09浏览次数:12  
标签:03 10 int 0x1 取反 C语言 运算符 printf

基本运算符

* /

int a = b*10;	CPU可能多个周期,甚至要利用软件的模拟方法去实现乘法
int a = b+10; 	CPU一个周期可以处理

/取整
%取余
一般使用/和%配合得到小数,一般/的结果得到的是整数,除非:
	float a,b,c,d;
	a = 7 / 2;
	b = 7.0 / 2;
	c = 7 / 2.0;
	d = 7.0 / 2.0;
	printf("p is %f\n",a);
	printf("p is %f\n",b);
	printf("p is %f\n",c);
	printf("p is %f\n",d);
输出:
p is 3.000000
p is 3.500000
p is 3.500000
p is 3.500000
    

0%3=0 1%3=1 2%3=2 3%3=0 4%3=1 ... ...
n % m = result     [0 ~ m-1]	//取余操作的结果范围就是0~m-1之间
    
用法:
	取一个范围的数:
		eg.给一个任意的数字,得到一个1到100以内的数字?
            (m % 100)+1 ===> res;
	得到M进制的一个个位数
    循环数据结构的下标

逻辑运算

就是只有真和假,非0即真

A || B 等于 B || A 吗?	答案是不等于!
A && B 同理
由于C语言编译器是按照先后顺序进行一个预判断,然后再决定是否执行  
A和B是个表达式,表达式也可以是个函数调用:
    res = ((a == 10) || printf("=========\n"));
	当a==10为真时,不执行后面的printf语句
        
    res = ((a != 10) || printf("=========\n"));
	当a==10为假时,才会执行后面的printf语句,最后res的结果还是为1

!:逻辑取反

对比位运算中的位取反

int a = 0x0;

!a;
if(!a){};	执行!a后,if条件为真,就可以执行if后的东西,取非

~a;
0xffff		而位取反,是把a的所有位取反,最后a=0xffff

位运算

<< >> 左移右移

左移:乘法,* 2 二进制下的移位

m<<1;	m*2
m<<n;	m*2^n    

4: 0 0 1 0 0	
8: 0 1 0 0 0    整体往左移
int a = b * 32;	在计算机看来就是====>	b<<5

负数乘法也是可以适用的:
     -1 * 2 = -2
原码:1 0 0 0 0 0 0 1							1 0 0 0 0 0 1 0
取反:1 1 1 1 1 1 1 0	//符号位不变,其余取反	 1 1 1 1 1 1 0 1
补码:1 1 1 1 1 1 1 1	//取反后+1				  1 1 1 1 1 1 1 0
在计算机内存中-1的表示方式就是全1;   			   ==== -2

左移后,末尾空出的那位默认填0
0x80的原码是1000 0000,补码还是1000 0000,因为符号位始终不会变,当进到第8位的时候,就溢出被舍弃  
0000 0000:+0
0111 1111:+127
1000 0000:-0或-128
1111 1111:-127  

右移:除法,/2

右移的最高位与符号变量有关

右移后,最高位空出来的默认是符号位,正数位0,负数为1

int a = xxx;    
while(a){
    a = a>>1;
}    
prinf("-----------------\n")
    
只要a是负数,a就永远变不了0,因为符号位一直在那占着,因此printf无法执行到
a是负数时,最终内存会被1填充,
a是正数时则可变为全0,

逐位 与、或、异或

&、|、^

A & 0 = 0   
&:屏蔽
	int a = 0x1234;
	a & 0xff00;		屏蔽低8bit,取出高8bit
A & 1 = 1
&:取出
&用的更多的是清零器

A | 0 = A
保留操作
A | 1 = 1
|用的更多的是将其当作设置高电平的方法

设置一个寄存器的bit5为高电平,其他位不变

int a;
a = (a | (0x1<<5));		可以引申出====> a = a | (0x1<<n)

清除第五位

int a;
a = a & ~(0x1<<5);		可以引申出====> a = a & ~(0x1<<5) 

异或、取反:^、~

一般交换两个数我们会使用:
int fun()
{
    int a = 20;
    int b = 30;
    int c;
    c = a;
    a = b;
    b = c;
    此外还可通过异或来交换两个数:
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}

~

0xf0	~	0xffff ff0f	//不同的系统对应不同的结果,不一定是32位整型常量

在上述的所有运算符中,都不具备赋值的能力,也就是说,原来变量的值不会变

赋值运算

只有 等号 具备更新能力

=、+=、-=、&=、......诸如此类...

内存访问符号

()
	限制符		(a+b)*c
    函数访问
    int fun();
	fun();

[]
	数组
    内存访问的ID符号:a[1] a[2]

{}
	函数体的限制符
    结构体的定义符号:struct abc{xxx}

->	.
	对于连续空间,也就是自定义空间中,不同成员变量的访问方法
    ->	地址访问
    .	变量访问
    
&  *
	&p		取地址
    a&0x1	与运算
    
    *p		指针
    a*10	乘法

标签:03,10,int,0x1,取反,C语言,运算符,printf
From: https://www.cnblogs.com/xishiyuyuan/p/18293287

相关文章

  • IDEA社区版搭建Spring工程(03-Spring MVC搭建)
    新建一个基于Maven的"webapp"模板的基础工程在main文件夹下新建java源码文件夹将自动生成的index.jsp移入webapp的view文件夹下,在java下新建一个controller文件夹添加SpringMVC框架所需的POM配置<properties><project.build.sourceEncoding>UTF-8</pro......
  • day03-loadbalancer
    1概述LoadBalancer:被包含于springcloudcommons下用来替换以前的ribbon组件,一个客户端负载均衡器。不仅支持RestTemplate,还支持WebClient(SpringWebFlux中提供的功能,可以实现响应式异步请求)。客户端负载均衡和服务端负载均衡有什么区别服务端负载均衡:负载均衡在服务器上......
  • 墨烯的C语言技术栈-C语言基础-010
    十.选择语句和循环语句如果你好好学习,校招时拿一个好offer,走上人生巅峰如果你不学习,毕业等于失业,回家卖红薯这就是选择结构intmain(){intinput=0;printf("加入C语言\n");printf("要好好学习吗(1/0)?");scanf("%d",&input);//if(input==1){printf("好offe......
  • c语言函数指针和函数数组
    1.函数指针我们都知道c语言指针可以指向整形,浮点型,字符等等,但实际上指针也可以指向函数。实际上当我们定义一个函数时,最终都会创建一个函数指针存储函数的地址。那么函数指针怎么定义呢?函数指针的定义不同于其他变量的定义,其他变量的定义是这样的:变量类型变量名;但c......
  • 常用的排序算法(C语言)
    1、冒泡排序(BubbleSort)冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮......
  • 洛谷P5594 【XR-4】模拟赛C语言
    #include<stdio.h>intmain(){ intn,m,k; inti,j; inth,l; scanf("%d%d%d",&n,&m,&k); intarr[n+1][m+1]; intday[k+1]; for(i=1;i<=n;i++){//录入数据 for(j=1;j<=m;j++){ scanf("%d&quo......
  • 洛谷P1014Cantor 表 C语言
    #include<stdio.h>intmain(){intinput;inth,k;inti,sum=0;scanf("%d",&input);for(i=1;;i++){sum+=i;//求出input数在那个范围内,i就是行数,sum就是所有行加起来数的个数if(sum>=input){h=......
  • 洛谷P1308 [NOIP2011 普及组] 统计单词数C语言
    #include<stdio.h>#include<string.h>#include<ctype.h>intmain(){charcheck[11];charstr[1000001];intf_num=0;intcount=0;inti=0;intj=0;intp=1;gets(check);gets(str);......
  • 03 配置开发环境
    写在前面本随笔是非常菜的菜鸡写的。如有问题请及时提出。可以联系:[email protected]:https://github.com/WindDevil(目前啥也没有rCore官方文档实验环境配置-rCore-Tutorial-Book-v33.6.0-alpha.1文档(rcore-os.cn)配置C开发环境sudoapt-getupdate&&sudoa......
  • 从零开始学习嵌入式----C语言数据存储(大端与小端)
     目录一、什么是数据中的高位与低位?内存空间中的高地址与低地址?1)内存空间中的低地址与高地址2)数据中的高位与低位二、什么是大端存储与小端存储1)大端存储2)小端存储三、大小端存储方法的测试1)使用指针测试大小端2)使用共用体测试大小端一、什么是数据中的高位与......