嵌入式笔记day04

位运算符

对存储的二进制码的每一位进行操作(不管是不是符号位,只对位进行操作)

~位逻辑反
&位逻辑与(每位相与,同1为1)
I位逻辑或(每位相或,同0为0)
^位逻辑异或(不同为1,相同为0)
>>右移位
<<左移位
  • 位移运算中运动量必须为整形结果数值,表达式也必须为整形结果数值
  • 对于左移,补0;对于无符号右移,补,有符号右移,补符号位
思考题:								//从右到左,低位到高位,从第0位开始
将a第三位置1,其他保持不变			//a = a | (1<<3)
将a第三位置0,其他位保持不变			//a = a & (~(1<<3))
将a第【74】位置0101,其他保持不变	//a = a & (~(0xf<<4)) | (0x5<<4)
打印一个整数的二进制形式				//右移动后 & 1,确定该位是1还是0,不断循环到最后

赋值运算符

+=a += b 等价于a = a + b
-=a -= b 等价于 a = a - b
*=a *= b 等价于 a = a * b
/=a /= b 等价于 a = a / b
%=a %= b 等价于 a = a % b
&=a &= b 等价于 a = a & b
I=a I= b 等价于 a = a I b
^=a ^= b 等价于 a = a ^ b
>>=a >>= b 等价于 a = a >> b
<<=a <<= b 等价于 a = a << b

特殊运算符

  1. 条件运算符(? : )
    三目运算符,真返回?后内容,假返回:后内容
//一个条件运算符代替if~else语句的例子
	int x, y = 25;
	x = 70;
	y = x++ > 70 ? 100 : 0;			//判断x++是否大于70,是输出100,否输出0
	printf("x = %d, y = %d", x, y);
  1. sizeof
sizeof(类型或变量名);	//针对数据类型判断所占字节
int x = sizeof(double);

输出函数

  1. 字符输出函数 putchar©
    c为字符常量、变量或表达式
    功能:把字符c输出的显示器上

  2. 格式输出函数 printf(“格式控制串”, 输出表)
    格式控制串前有%修饰

格式符作用
i, d十进制整数
x, X十六进制无符号整数
o八进制无符号整数
u无符号十进制整数
c单一字符
s字符串
e, E指数形式浮点小数
f小数形式浮点小数
ge和f中较短一种
%%百分号本身

附录:思考题代码

#include <stdio.h>
void f1()
{
    unsigned int a = 181;
    unsigned int b = a | (1<<3);
    int i = 31, j = 31;
    printf("将a的第三位置1,其他保持不变\n");
    printf("a的值为:%d\n", a);
    printf("b的值为:%d\n", b);
    printf("a的二进制为:");
    while(i >= 0)
    {
        printf("%d", (a >> i) & 1);
        i--;
    }
    printf("\n");

    printf("b的二进制为:");
    while(j >= 0)
    {
        printf("%d", (b >> j) & 1);
        j--;
    }
    printf("\n");
}

void f2()
{
    unsigned int a = 207;
    unsigned int b = a & (~(1<<3));
    int i = 31, j = 31;
    printf("将a的第三位置0,其他保持不变\n");
    printf("a的值为:%d\n", a);
    printf("b的值为:%d\n", b);
    printf("a的二进制为:");
    while(i >= 0)
    {
        printf("%d", (a >> i) & 1);
        i--;
    }
    printf("\n");

    printf("b的二进制为:");
    while(j >= 0)
    {
        printf("%d", (b >> j) & 1);
        j--;
    }
    printf("\n");
}

void f3()
{
    unsigned int a = 249;
    unsigned int b = a & (~(0xf<<4) | (0x5<<4));
    int i = 31, j = 31;
    printf("将a的【7:4】置为0101,其他保持不变\n");
    printf("a的值为:%d\n", a);
    printf("b的值为:%d\n", b);
    printf("a的二进制为:");
    while(i >= 0)
    {
        printf("%d", (a >> i) & 1);
        i--;
    }
    printf("\n");

    printf("b的二进制为:");
    while(j >= 0)
    {
        printf("%d", (b >> j) & 1);
        j--;
    }
    printf("\n");
}

int main(int argc, char *argv[])
{ 
    f1();
    f2();
    f3();
    return 0;
} 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值