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); } } }
来源:https://www.cnblogs.com/GameCode/archive/2010/07/02/1769972.html