C语言基础语法第十篇

1.基本数据类型的强转

C语言基础语法第十篇_第1张图片

 

 2.指针的强转

C语言基础语法第十篇_第2张图片

指针内存储相同的地址,但会根据指针的类型采取相应的解析方式 

C语言基础语法第十篇_第3张图片

3.const 修饰变量

 const int a=10;

c++在编译时,a保持常性,会将a全部替换为10

c在编译时,a保持变量的属性,不进行替换

 4.位操作

&(与)  ,    ^(异或)   ,   |(或)   ,  ~(取反)   ,  <<(左移) ,   >>(右移) 

这些操作只针对 整型(char  ,  short  ,   int ...)  

注:%(取模运算符)也只针对整型数

5. &

与   1相& == 0   则为偶数,否则为奇数 (奇数的二进制位最后一位肯定为1)

任何整数与0相&肯定为0

位&可以把某一位  置为0

6. |

位 | 可以把某一位  置为1 

7.^

1). 归零率(任何整型数和自身异或时都为0)

2). 恒等率  (任何整数和0异或都为其本身)

3). 交换律  

4). 结合律   

5). 自反率    cha^chb^cha  == chb

8.不使用中间变量交换两个变量

#include 
#include 
int main()
{
	char cha = 12;
	char chb = 23;

	cha = cha^chb;
	chb = cha^chb;  //=>cha
	cha = cha^chb;
	printf("%d\n", cha);
	printf("%d\n", chb);
	system("pause");
	return 0;
}

C语言基础语法第十篇_第4张图片

分析:

C语言基础语法第十篇_第5张图片

 9.找出数组只出现一次的元素

#include 
#include 
int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8 };
	int count = sizeof(arr) / sizeof(arr[0]);
	int tmp = 0;
	for (int i = 0; i < count; i++)
	{
		tmp = arr[i] ^ tmp;
	}
	printf("%d\n", tmp);
	system("pause");
	return 0;
}

C语言基础语法第十篇_第6张图片

10. 左移<<

 

<<左移一位,后面添一个0

 

11. 右移>>

有符号数 >> 右移一位,前面添一个符号位

无符号数 >> 右移一位,前面添一个0

 

12.左移和右移的应用

将某一位置为0时,可将1左移到此位置,然后取反~,在与该整数相&

#include 
#include 
int main()
{
	char ch = 0xaa;
	  // ch   =>  1010 1010
	  //               0
	  //          0000 1000    1左移三次
	  //          1111 0111    对其取反
	  //          1010 0010    再与ch相与
	ch = ~(1 << 3)&ch;
	return 0;
}

13.计算一个整数的二进制位中有多少个1

#include 
int Get_Bit1(unsigned int x)
{
	int sum = 0;
	while (x!=0)
	{
		if (x & 1 )
		{
			sum++;
		}
		x = x >> 1;
	}
	return sum;
}

int main()
{
	int x = 0;
	int sum = 0;
	scanf("%d", &x);
	sum = Get_Bit1(x);
	printf("sum=%d\n", sum);
	system("pause");
	return 0;
}

 

C语言基础语法第十篇_第7张图片

 

你可能感兴趣的:(C语言,c语言,开发语言,后端)