CSAPP-Bits,Bytes,and Integer

这篇博客记录了作者学习CSAPP(深入理解计算机系统)的笔记,主要探讨了位运算的集合解释,位移运算的细节,无符号数与补码转换,以及在C中数值比较的注意事项。还涉及到了计算机如何表示数据类型,包括大端法与小端法的区别,并介绍了补码的概念。此外,文章提出了一个关于计算绝对值函数在特定输入下的行为的思考题。
摘要由CSDN通过智能技术生成

这是我开始学习CSAPP的笔记的第二篇,在接下来的内容,我会分享自己在学习CSAPP时的笔记,感受等等,学习资料来自b站

声明:所有内容基于自己的理解,如有错误感谢大家指出。

链接:【精校中英字幕】2015 CMU 15-213 CSAPP 深入理解计算机系统 课程视频_哔哩哔哩_bilibili

一.对位运算的理解

1.&,|,^,~

之前一直仅仅把位运算当做一种普通的操作符,现在看到这之后,发现原来位运算跟集合的操作是有联系的,逻辑与相当于2个集合交集,逻辑或相当于2个集合并集,逻辑非则是取补集,而异或运算则是取2个集合的差集的并集。

2.位移运算

        左移n位:将低位左移n位,高位将会被覆盖,低位补0.

                如: 01001110 左移4位 -> 11100000

        右移

                逻辑右移: 右移n位,高位补0

                算术右移: 右移n位,高位补符号位数字(最左边的一位是0就补0是1就补1)

x = 01001000
x << 8 //这里相当于 x << 8mod8 = x << 0,所以x没有改变

        这里视频中提到一个x << 8你会得到什么,弹幕有的说翻译错了有的说没错。然后我自己用c试了一下,x << 8之后你得到的还是x本身,我理解的是因为x的数据类型是由8位表示的,所以你左移n位其实就等于你左移n%8位,所以x<<8 = x << 0那不移动不就是本身咯,虽然很奇怪,但计算机就是这么计算的,理解成一种优化把。

一.无符号二进制和补码转十进制

        公式挺简单的,就是学校里教的求和公式。

       注意一下有符号的第一位求和的时候要加负号

        举例:同样对于 11111

        无符号:  16 + 8 + 4 + 2 + 1 =31

        补码: -16 + 8 + 4 + 2 + 1 = -1

        然后有几个概念,Umax,Umin,TMax,TMin,见下图

 

三.c中数值的比较

        总结一下就是如果2个数类型不同(一个是无符号,一个是有符号(补码)),就需要转化成无符号的进行比较,补码转无符号的方法就是如果补码符号位为正,那么相等。如果为负数,那么加上2的n次幂,n是数据类型的用的多少位来表示。

四.一个小思考题

//下面是一个计算绝对值的函数,思考输入TMin会返回什么
if(x >0)
    return x
else 
    return -x

因为我们知道|TMax| = |TMin| - 1,所以我们似乎没办法表示TMin的绝对值,所以输出结果肯定不是|TMin|。

答案是TMin,因为计算机计算一个数的负数,是通过 -x = ~x + 1实现的,这个等式的原理是:

举个例子,一个4位的数据类型,那么无论哪个数x,x + ~x = 1111 = -1 所以 x + ~x + 1 = 0,所以

- x = 0 - x =  ~x + 1。


上面的内容是看视频过程中做的笔记,看完之后是有点懵的,等我去看看书再回来继续写。


多少位的机器是指程序最多访问多大的虚拟地址空间,如32位机器可以访问2的32次方的字节。

五.大端法与小端法

我们都知道,一个数据类型一般在计算机中是连续存放的,比如一个int类型的首地址是0x100,那么他会占用从0x100开始的四个字节,0x101,0x102,0x103.假设你这个int类型的数字的值的十六进制表示是0x

大端法小端法其实就是存储的顺序不同,见图.

但是对于字符不会有影响,因为字符就占一个字节,所以大端法小端法都一样。因此文本类型的数据比二进制数据更具有平台无关性。

六.补码

相信很多人跟我一样对补码的理解还停留在,反码加1。。。。。

看了CSAPP我才知道补码原来是计算机中对有符号数的一种表示。

7.无符号数与有符号数的互转

c语言是支持类型强制转化的,而强制转换其实就是改变了二进制表示的解释方式.

 总结

这一节课的视频主要就介绍了数据类型在计算机中是如何表示的,以及一些基本运算,及这些运算可能出现的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值