c-运算符与原码,反码,补码

本文内容看目录就对了

1.赋值运算符

=
赋值时发生隐士类型转换
第一类:较长的数据转化为较短的数据,精度缺失,发生截断,警告。
第二类:较短的数据转换为较长的数据,类型的提升,警告。
赋值时发生显示类型转换(强制转换)
(类型名)表达式

int)a/b

2.算数运算符

单目运算符:+(正号)、-(负号)、++、–
双目运算符:+、-、*、/(符号两边要有两个操作数,如果操作数两边都是同一类型,则结果也是同一种类型)
后++ 后- -:先使用后运算
前++ 前- -:先运算后使用

在这里插入图片描述

3.关系运算符

关系数学中的表示C语言的表示
小于<<
小于等于<=
大于>>
大于等于>=
等于===
不等于!=

0为假 非0为真

int a=45,b=54,c=0;
c = a == b;//c=o
c=12<=a<=30;//c=1,为真,由于关系运算符不能连着写,运算符相同,从左往右运算
            //12<=45 使其为1,1<=30,为真,故c=1.

4.逻辑运算符

逻辑与:&& 同真则真,一假则假
逻辑或:|| 同假则假,一真则真
逻辑非:! 真的变假,假的变真

#include<stdio.h>
int main()
{
int a=45,b=4,c=0;
c=(a=60)||(b=50);
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;//输出a=60,b=4,c=1;
}

5.三目运算符

?:
表达式?语句1:语句2
如果表达式为真,就执行语句1,为假就执行语句2

#include<stdio.h>
int main()
{
	int a = 45, b = 4, c = 0;
	c = a < 10 ? printf("为真/n") : printf("为假\n");
	printf("c=%d\n", c);
	/*为假
	c=5
	printf函数的返回值是打印的字符数*/
	return 0;
}

if(表达式)

else

6.位运算符与原码,反码,补码

原码,反码,补码
原码:计算出来的二进制
反码:负数:符号位不变,其余为按位取反
补码:负数:符号位不变,反码加1
正数:三码合一,原码,反码,补码相同
负数:正数符号位0,负数符号位1
真正计算机进行计算是补码进行计算,计算结果在转换成原码
负数补码转原码,将补码当做原码来做,继续取反加1

十进制原码反码补码
50000 0000 0000 0000 0000 0000 0000 01010000 0000 0000 0000 0000 0000 0000 01010000 0000 0000 0000 0000 0000 0000 0101
-51000 0000 0000 0000 0000 0000 0000 11011111 1111 1111 1111 1111 1111 1111 1111 10101111 1111 1111 1111 1111 1111 1111 1111 1011

几种常用的编码

十进制数8421码余3码格雷码2421码5211码
000000011000000000000
100010100000100010001
200100101001100100100
300110110001000110101
401000111011001000111
501011000011110111000
601101001010111001001
701111010010011011100
810001011110011101101
910011100110111111111
8421无权无权24215211

在这里插入图片描述

位运算符
|符号|
&:按位与: 相对应的二进制位:都为1才为1,否则为0
|: 按位或: 相对应的二进制位:有1为1,否则为0
^:按位异或:相对应的二进制位:相同为0,不同为1
~:按位取反: 相对应的二进制位:0变1,1变0
<<:左移 : 高位丢失,低位补0
.>>:右移:
--------------正数:低位丢失,高位补0
--------------负数:低位丢失,高位补1

#include<stdio.h>
int main()
{
	int a = 10, b = 0;
	b = a << 2;         //左移2位
	printf("b=%d\n", b);//输出b=40
	//a:  0000 0000 0000 0000 0000 0000 0000 1010  原码=反码=补码
	//b:  0000 0000 0000 0000 0000 0000 0010 1000  补码
	//    0000 0000 0000 0000 0000 0000 0010 1000  原码->40
	b = a >> 2;         //右移2位
	printf("b=%d\n", b);//输出b=2
	//a:  0000 0000 0000 0000 0000 0000 0000 1010  补码
	//b:  0000 0000 0000 0000 0000 0000 0000 0010  补码
	//    0000 0000 0000 0000 0000 0000 0000 0010  原码->2
	return 0;
}
#include<stdio.h>
int main()
{
	int a = -8, b = 0;
	b = a << 3;        //左移3位
	printf("b=%d\n", b);//输出b=-64
	//a:  1000 0000 0000 0000 0000 0000 0000 1000  原码
	//    1111 1111 1111 1111 1111 1111 1111 0111  反码
	//    1111 1111 1111 1111 1111 1111 1111 1000  补码
	//b:  1111 1111 1111 1111 1111 1111 1100 0000  补码
	//    1000 0000 0000 0000 0000 0000 0011 1111  反码
	//    1000 0000 0000 0000 0000 0000 0100 0000  原码-> -64
	b = a >> 3;         //右移3位
	printf("b=%d\n", b);//输出b=-1
	//a:  1111 1111 1111 1111 1111 1111 1111 1000  补码
	//b:  1111 1111 1111 1111 1111 1111 1111 1111  补码
	//    1000 0000 0000 0000 0000 0000 0000 0000  反码
	//    1000 0000 0000 0000 0000 0000 0000 0001  源码-> -1
	return 0;
}
int a=5,b=4,c=0;
c=a&b;//输出c为4
//a   0101      补码
//b  &0100      补码
//c   0100      补码=》原码
int a=5,b=4,c=0;
c=a|b;//输出c为5
//a   0101      补码
//b  &0100      补码
//c   0101      补码=》原码
```c
#include<stdio.h>
int main()
{
	int a = 45, b = 10, c = 0,d = 0;
		c = (a + b, b + c, a + c);
		d =  a + b, b + c, a + c;
		//     55,    10,    45
	printf("c=%d,d=%d\n", c,d);
	return 0;//输出结果c=45,d=55
}
```c
int a=-5,b=-4,c=0;
c=a&b;//输出c为-8
//a   1000 0000 0000 0000 0000 0000 0000 0101      源码
//    1111 1111 1111 1111 1111 1111 1111 1010      反码
//    1111 1111 1111 1111 1111 1111 1111 1011      补码1
//b   1000 0000 0000 0000 0000 0000 0000 0100      源码
//    1111 1111 1111 1111 1111 1111 1111 1011      反码
//    1111 1111 1111 1111 1111 1111 1111 1100      补码2
//--------------------------------------------------------
//c   1111 1111 1111 1111 1111 1111 1111 1000      1与2》补码3
//补码3=》原码
//    1000 0000 0000 0000 0000 0000 0000 0111      反码
//    1000 0000 0000 0000 0000 0000 0000 1000      原码》》   -8

负数补码转原码,将补码当做原码来做,继续取反加1

7.逗号运算符

可以用逗号运算符将多个表达式分隔开,整个表达式的值是最后一个表达式的值。
逗号表达式的优先级最低,低于赋值运算符

#include<stdio.h>
int main()
{
	int a = 45, b = 10, c = 0,d = 0;
		c = (a + b, b + c, a + c);
		d =  a + b, b + c, a + c;
		//     55,    10,    45
	printf("c=%d,d=%d\n", c,d);
	return 0;//输出结果c=45,d=55
}

8.复合运算符

复合运算符有:+=,-=,*=,/=,&=,|=,^=,~=

#include<stdio.h>
int main()
{   
	int a = 45, b = 10, c = 0,d = 0;
    a+=10;  //a=a+10
    a-=10;  //a=a-10
    a*=10;  //a=a*10
    a/=10;  //a=a/10
    a&=10;  //a=a&10
    return 0;
}

9.sizeof运算符

sizeof是一个运算符,而不是函数
用于:求一个类型或一个变量所占内存的大小

#include<stdio.h>
int main()
{
	int a = 10;
	printf("sizeof=%d\n", sizeof(int));
    //sizeof=4
	return 0;
}

sizeof运算符不会进行赋值操作

#include<stdio.h>
int main()
{
	int a = 10;
	sizeof(a = a + 1);
	printf("a=%d\n", a);
	return 0;//a=10
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值