php学习笔记第一天(原码、补码、反码和逻辑运算符)

一、原码、补码、反码

1、正数的补码和反码都是本身,负数的反码的符号位不变,其它位取反,0表示正数,1表示负数,负数的补码在最后一位加1

3的原码    00000000   00000000   00000000   00000011

    反码     00000000   00000000    00000000  00000011

     补码    00000000   00000000    00000000  00000011

-3的原码   10000000   00000000   00000000   00000011

       反码   111111111   111111111   111111111   11111100

       补码   111111111   111111111   111111111    11111101

2、计算机cpu的计算都是基于补码计算的,反码在计算过程中符号位当做“数”来处理

      3+(-3):

3的补码:  00000000   00000000    00000000  00000011

-3的补码: 111111111   111111111   111111111    11111101

-----------------------------------------------------------------------------------------------

                  00000000   00000000   00000000    00000000

二、逻辑与、或、非

逻辑与、或、非是指按位取与、按位取或、按位取非(反),一个整数有32个位,所以逻辑操作运算符都是基于二进制进行的

1 & 1  ==》 1

1 &  0  ==》 0

0 & 0  ==》  0

&操作符是全1才为1,否则为0

1 | 1  ==》1

1 | 0  ==》 1

0 | 0  ==》  0

|操作符是有1就为1,全0才为0

!1  ==》   0

!0  ==》 1

^操作符是取反

三、管理开关状态

1、设置当前状态 $state

2、指定的灯D5打开 $state = $state | D5

3、指定的灯D1关闭  $state = $state & (~D1);

四、运算符的优先级

1、括号最优先,赋值最后

2、先乘除后加减

3、单目运算符>算术运算符>比较运算符>逻辑运算符(除了非运算符)

### 计算机组成原理学习笔记 #### 原码补码反码和移码的概念及其相互转换 在计算机科学中,为了有效地处理正负数并简化硬件设计,引入了几种不同的编码方式来表示二进制数据。 - **原码 (Sign-Magnitude Representation)** 是最直观的一种形式,在这种模式下最高位作为符号位用来区分正负;其余各位则直接对应绝对值的二进制表达。对于八位机器而言,+7会被记作`0000 0111`而−7则是`1000 0111`[^1]。 - **反码 (One's Complement)** 的定义是在已知某个数X的原码基础上得到其相反数Y的方法之一:当X为正时保持不变;如果X是负数,则除了首位外其他所有位置上的比特都要翻转(即由0变1或反之)。例如十进制整数-14使用反码表示就是 `1111 0001`。 - **补码 (Two's Complement)** 提供了一种更加高效的解决方案用于加减运算操作。它基于这样的原则——任何给定字长n内的有符号整数Z都可以通过将其对应的无符号数值加上\(2^{(n)}\) 来获得。具体来说,求得一个数N的补码可以先计算它的反码再对该结果整体加一。因此,-14采用8-bit存储格式下的补码应写作`1111 0010`。 - **移码 (Bias Representation)** 主要应用于浮点数规格化过程中指数部分的表现上。简单理解的话,就是在原有真值的基础上增加了一个固定的偏置量bias从而使得所有的可能取值都变为正值范围之内便于比较大小关系。比如IEEE标准规定单精度float类型的E字段实际意义等于e+bias其中bias=127;双精度double里边相应地设定了另一个更大的常数1023作为偏置因子。 ```python def get_complements(value, bits): """获取指定长度bit位的原码/反码/补码""" if value >= 0: original_code = bin(value)[2:].zfill(bits) one_complement = ''.join(['1' if b=='0' else '0' for b in original_code]) two_complement_int = int(one_complement, 2) + 1 two_complement_bin = bin(two_complement_int)[2:].zfill(bits)[-bits:] return { "original": f"0{original_code}", "one_comp": f"{''.join('1' if c == '0' else '0' for c in ('0'+original_code))}", "two_comp": f"{two_complement_bin}" } else: abs_val = abs(value) original_code = bin(abs_val)[2:].zfill(bits) one_complement = ''.join(['1' if b=='0' else '0' for b in original_code]) two_complement_int = int(one_complement, 2) + 1 two_complement_bin = bin(two_complement_int)[2:].zfill(bits)[-bits:] return { "original": f"1{original_code}", "one_comp": f"1{''.join('1' if c == '0' else '0' for c in original_code)}", "two_comp": f"{'{:0%db}' % bits.format(int(not bool(value<0))*int(original_code,2)+(value<0)*two_complement_int)}" } print(get_complements(-14, 8)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值