C语言基础-运算符

#include<stdio.h>

void wei();
void yiwei();
void sanmu();
void changdu();


int main() {

	wei();
	sanmu();
	changdu();
	yiwei();
	return 1;
}


void wei() {
	printf("\n==============位运算=============\n");
	/*
	位运算

	反码
		正数的反码是其本身
		负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
	补码
		正数的补码就是其本身
		负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
	*/
	int i = 3;
	int j = 2;
	
	/*
	按位与运算
		规则:两个运算量中对应位都是1,则该位的结果值为1,否则为0
	*/
	int k1 = i & j;
	/*
	0000 0011
	0000 0010
	&
	0000 0010
	= 2
	*/
	printf("\n%d & %d = %d", i, j, k1);
	
	/*
	按位或运算
		规则:两个运算量中对应位只要有一个为1,则该位的结果值为1,否则为0
	*/
	int k2 = i | j;
	/*
	0000 0011
	0000 0010
	|
	0000 0011
	= 3
	*/
	printf("\n%d | %d = %d", i, j, k2);

	/*
	按位异或运算
		规则:两个运算量中对应位不同,则该位的结果值为1,否则为0
	*/
	int k3 = i ^ j;
	/*
	0000 0011
	0000 0010
	^
	0000 0001
	= 1
	*/
	printf("\n%d ^ %d = %d", i, j, k3);

	/*
	取反运算
		规则:一个运算量的每一位都取反
	*/
	int m = 7;
	/*
	0000 0111
	~
	1111 1000(最高位为符号位)
	注意:	有符号整数在计算机中采用补码存储,即1111 1010为所求整数的补码
			负数的补码 = 原码 取反(除符号位) + 1
			所以 原码 = 补码 - 1 取反
	补码 = 1111 1000
	反码 = 补码 - 1 = 1111 0111
	原码 = 反码取反 = 1000 1000 = -8
	*/
	int k4 = ~m;
	printf("\n~%d = %d", m, k4);
}

void yiwei() {
	printf("\n=====================移位运算=====================\n");
	/*
		右移位运算:
			变量名 >> 右移位数
			每右移一位,相当于/2
		左移位运算:
			变量名 << 左移位数
			每左移一位,相当于*2
	注意:
		对于带符号右移,若为负数,则在存储时首位表示符号位,其值为1,表示该值是负数的移位,在移位过程中,高位补1;
		若符号位是0,表示是正数,在移位过程中高位补零,两者的前提是符号位保持不变:
	*/
	int i = 8;
	int m = 2;
	int j = i >> m;
	/*
	i = 0000 1000
	i >> 2 = 0000 0010 = 2
	*/
	printf("\n%d >> %d=%d", i,m,j);
	int k = i << m;
	/*
	i = 0000 1000
	i << 2 = 0010 0000 = 32
	*/
	printf("\n%d << %d=%d", i, m, k);
	i = -8;
	j = i >> m;
	/*
	原码i = 1000 1000
	反码i = 1111 0111
	补码i = 1111 1000
	补码i >> 2
	补码k = 1111 1110
	反码k = 1111 1101
	原码k = 1000 0010 = -2
	*/
	printf("\n%d >> %d=%d", i, m, j);
	k = i << 2;
	/*
	原码i = 1000 1000
	反码i = 1111 0111
	补码i = 1111 1000
	补码i << 2
	补码k = 1110 0000
	反码k = 1101 1111
	原码k = 1010 0000 = -32
	*/
	printf("\n%d << %d=%d", i, m, k);
}

void sanmu() {
	printf("\n=================三目条件运算==================\n");
	/*
	三目条件运算
		基本形式:e1?e2:e3
		规则:若e1为真,则整个表达式结果值取e2,否则整个表达式结果取e3。
	*/
	int a = 1;
	int b = 2;
	int c = a > b ? a : b;
	printf("\n%d = %d > %d ? %d : %d", c, a, b, a, b);
}

void changdu() {
	printf("\n=================长度运算===================\n");
	/*
	sizeof是取数据类型或变量的存储长度的运算符(以字节为单位)
	格式是:
		sizeof(数据类型说明符或变量名)
	*/
	int a = sizeof(double);
	printf("\nsizeof(double)=%d", a);
}

执行结果:

==============位运算=============

3 & 2 = 2
3 | 2 = 3
3 ^ 2 = 1
~7 = -8
=================三目条件运算==================

2 = 1 > 2 ? 1 : 2
=================长度运算===================

sizeof(double)=8
=====================移位运算=====================

8 >> 2=2
8 << 2=32
-8 >> 2=-2
-8 << 2=-32

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WUYANGEZRA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值