CMU-213 听课笔记 lesson 1(逻辑操作,unsigned,位扩展与压缩)

C 语言数据类型在各个系统中所占的字节数

在这里插入图片描述

布尔代数(类似于集合操作)

在这里插入图片描述

示例:在这里插入图片描述

C 语言中的逻辑操作

  • 0 当作 False, 任何非 0 的数都是 True
示例(对比上图):

在这里插入图片描述

移位操作

左移:x << y
  • 将 x 向左移动 y 个位置
  • 算数左移和逻辑左移都是向右补 0
右移:x >> y
  • x 向右移动 y 个位置
  • 逻辑右移:在左边补 0
  • 算数右移:在左边补最高的那一位
当移位数(< 0)或者大于所定义类型的位数(以 8 位为例)
  • 如果移动的位数大于 8 ,比如 x << 9,则实际位移量为(8%9) == 1
  • 如果移动的位数小于 0 ,比如 -1, 则实际的位移量为 8 -|-1| == 7

无符号整型与有符号整型

在这里插入图片描述

看上图,其中无符号整型的最大值为 65535 ,最小值为 0,它是一个永远大于0的数

因此,如果你在 C 语言中做出了以下声明

unsigned short a = -1

那么它会转换成上图 -1 所对应的16进制 FF FF,也就是 65535

因此,下面的代码:

unsigned short a;
for(a = 10; a >=0; a--)
    print("hello");

会是一个死循环,因为 a 永远不可能小于 0,当它为 0 时,再减 1 就会变成 65535

还有下面的代码:

unsigned short a;
for(a = 10; a - sizeof(char) >=0; a--) // sizeof(char) 等于 1
    print("hello");

这会得出什么?

还是个死循环!因为 sizeof(char)得到的size_int类型的值, 而它是一个unsigend long类型,unsigned类型不会小于 0

接下来你可能就会理解下图了:
在这里插入图片描述

位扩充

  • 在左边补最高位的值
    在这里插入图片描述

位压缩

  • 丢弃高位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值