计算机组成原理

浪尽此生 提交于 2019-12-21 05:35:36

I:原码,补码和反码

 

1. 在计算机系统中,数值一律用补码来存储

使用补码,可以将符号位和其他位统一处理;同时减法也可按加法处理。

两个用补码表示的数相加是,如果最高位(符号位)有进位,则进位被抛弃。

2.正数的补码和原码相同

3.负数的补码:符号位为1,其余位为原码按位取反,然后整个数+1

4.已知补码求原码:

     负数:(符号位)为1,其余各位取反,然后整个数+1

5.模:

  一个计量系统的计数范围,时钟的计量范围是0~11,模=12

  模实质上说计量器产生“溢出”的量,它的值在计量器表示不出来,计量器上只能给你表示出模的余数。任何有模的计量器,均可减法为加法运算。例如当前时间是6点,但时钟指向10点,那么可以倒拨4的小时 10 - 4 = 6;也可以顺拨8个小时 (10 +8)%12 = 6 ,对于模而言,8和4互为补数,两者相加等于模。

 

Int32 a = -1 使用Convert.ToString()方法转换为字符串时,会转换成一个32位长度的字符串 11111111111111111111111111111111 对这里还是不明白。首位为1(负号)后面取反?写个小东西验证一下。

 

 

namespace SchedulerEngine{    public partial class MainPage : UserControl    {        public MainPage()        {            InitializeComponent();            int a = -12341;            string t = GetComplement(a);            Debug.WriteLine(GetStOfInt(a * -1));                    }        public static string GetStOfInt(int _a)        {            return Convert.ToString(_a, 2);        }        public static string GetStOfInt(long _a)        {            return Convert.ToString(_a, 2);        }        public string GetComplement(int _a)        {            Debug.WriteLine(GetStOfInt(_a));            if (_a >= 0)            {                return Convert.ToString(_a, 2);            }            else            {                //得到一个位数相同,但首位(符号位)为1(负),其他位为零的数                int b = 1 << (Convert.ToString(_a, 2).Length - 1);                Debug.WriteLine(GetStOfInt(b));                //两者相减,得到一个去掉符号位的数                int a = _a - b;                Debug.WriteLine(GetStOfInt(a));                //取反加1得到原码                int c = ~a;   //这个操作会增加一位,为什么呢?                Debug.WriteLine(GetStOfInt(c));                int d = c + 1;                Debug.WriteLine(GetStOfInt(d));                //有符号位的原码                return GetStOfInt(d);            }        }    }

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!