一道错过的很基础的笔试题

目前只记得个大概了:一个16位的操作系统

unsigned char a = -4 & 3;
a = ?

当初自己写的答案是3,但是真相却不是这样?第一个自己考虑到了隐性强制类型转换,第二个计算机是通过补码的形式来表示数据的,不过当时还是算错了!

原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

负数:负数的补码则是符号位为“1”。并且,这个“1”既是符号位,也是数值位。数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。

 

                                                              反码表示             补码表示

首先-4 转换成二进制:1000 0100       1111 1011           1111 1100

         3转换成二进制:0000 0011        0000 0011           0000 0011

 

当然这里这是作为8位的表示,如果作为系统默认的16位表示 高八位相与不用想也知道肯定全为0!原理看红色字体部分!

所以输出结果很肯定的就是 a = 0,当时居然做错了,基础知识确实好长时间没有稳固了,虽然很简单,也很基础,但是时间长这些知识点不稳固也忘了。整理一遍,也算是温故而知新!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值