目前只记得个大概了:一个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,当时居然做错了,基础知识确实好长时间没有稳固了,虽然很简单,也很基础,但是时间长这些知识点不稳固也忘了。整理一遍,也算是温故而知新!