csapp学习笔记(第二章)2.1.4-2.1.9

本文介绍了C语言中如何表示字符串、代码和布尔代数。重点讲述了位级运算,包括按位布尔运算、位移运算以及逻辑运算符,并通过实例解释了位运算在实际编程中的应用,如 inplace_swap 函数的实现和掩码运算。同时,提到了右移运算的逻辑右移和算术右移的区别。最后,讨论了C语言中的移位运算在处理大整数时的细节处理。
摘要由CSDN通过智能技术生成

2.1.4 表示字符串

  • C语言中一般用ascll码保存字符信息
    ascll字符编码仅适用于英文文档,对于不同语言的文字编码一般使用unicode

2.1.5 表示代码

  • 同一段代码在不同的机器中保存时,由于不同的指令集和编码方式,其产生的机器代码也不相同

2.1.6 布尔代数

  • 将逻辑值ture 和 false 编码为1和0 称为布尔值
  • 布尔运算
    ~:not(非)
    &:and(与)
    |:or(或)
    ^:exclusive-or(异或)
  • 布尔环:
    由于a ^ a=0 则有了0 ^ 0=1 ^ 1=0,故(a ^ b) ^ a = b
    一个示例
void inplace_swap(int *x,int *y){
    *y=*x^*y;//step 1
    *x=*x^*y;//step 2
    *y=*x^*y;//step 3
}

2.1.7 C语言中的位级运算

  • C语言支持按位布尔运算
  • 确定位运算结果的方式是将数据扩展为二进制后每一位执行二进制运算后转回十六进制
  • 位级运算的一个应用是掩码运算,如
    要选出x中最低有效字节的值,便可令x&0xff。

2.1.8 C语言中逻辑运算符

  • || && !分别对应命题逻辑中的or and not

2.1.9 C语言中的移位运算

  • C语言提供了一种移位运算 <<和>>
  • 向右移位较为特殊,分为逻辑右移和算术右移,其中逻辑右移和左移相似,但是算术右移时会在左边补上最高有效位的值
    例如 x=10010101 此时计算x>>4
    会得到11111001
  • 当移动位数为k,且k很大时,例如
#include <stdio.h>
int lval=0xfedcba98<<32;
int aval=0xfedcba98>>36;
unsigned uval=0xfedcba98u>>40;

C语言规避了这种情况,在以上的运算中,移位分别为0,4,8。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值