c/c++整理--位运算与嵌入式编程(3)

本文介绍了C语言中一些重要的概念和技术细节,包括无符号整数与有符号整数的自动转换、static关键字的作用、volatile关键字的含义、判断处理器的字节序以及针对不同处理器字长的代码优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、看代码写输出——整数的自动转换

void foo(void)
{
	unsigned int a = 6;
	int b = -20;
	if(a+b > 6)
	{
		puts(">6");
	}
	else
	{
		puts("<=6");
	}
}
这里需要注意的是,无符号数与有符号数之间运算的时候,有符号数要转换成无符号数再进行运算。这里很显然,-20转换成一个无符号数后是一个非常大的一个数。所以这里输出>6.

二、关键字static的作用是什么

(1)在函数体中,static变量在函数结束后不会被销毁,其值不会变。
(2)static全局变量,可以在本文件中被访问,在同一工程中的其他文件中不可见。
(3)static函数,可以在本文件中被访问,在同一工程中的其他文件不可见。

三、关键字volatile有什么含义

一个定义为volatile的变量是说这个变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确的说,就是优化器在用到这个变量时必须每次都小心地重新读取这个变量的值而不是使用保留在寄存器里的备份。
举例:
(1)并行设备的硬件寄存器(如状态寄存器);
(2)一个中断服务子程序会访问到的非自动变量;
(3)多线程应用中被几个任务共享的变量。


四、判断处理器是Big_endian还是Little_endian

编写函数,判断处理器是Big_endian还是Little_endian
int checkCPU()
{
	union w
	{
		int a;
		char b;
	} c;
	c.a = 1;
	return (c.b == 1);	
}
小端模式的CPU高位地址对应高位数据,地位地址对应地位数据。大端模式相反。联合体union的存放顺序是所有成员都从低地址开始存放,利用该特性轻松获得了结果。

五、评价代码片段——处理器字长

unsigned int zero = 0;
unsigned int compzero = 0xffff;
/*1's compzero of zero*/
对于一个不是16位的处理器来说,上面的代码是不正确的,应编写如下:
unsigned char compzero = ~0 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值