本来C/C++标准中使用移位操作符之后出现的空位是填0的
为什么在VC6.0中的移位操作符出现空位之后填1?
我本来今天在写一个base64的加密小程序,结果发现在加密中文的时候老出错
后来才发现是移位错了比如11010010向右移4位本来应该为00001101的
但是为什么在我的VC6.0中变成了11111101了?什么情况?求大神解答
为什么在VC6.0中的移位操作符出现空位之后填1?
我本来今天在写一个base64的加密小程序,结果发现在加密中文的时候老出错
后来才发现是移位错了比如11010010向右移4位本来应该为00001101的
但是为什么在我的VC6.0中变成了11111101了?什么情况?求大神解答
带符号的最高位做为负数指示了,位移还是保留了符号位
如果你想左边补0,必须用无符号来移位。
虽然vc6不怎么标准,但也不至于出这么严重的错误,不要轻易怀疑一个东西,虽然它很老,但用了10多年了。
比如一个char类型,值为11010010 向右移4位
移位之后得到的值应该为00001101吧 如果输出的话转换为10进制值为13
但是我实际输出之后值是-3(char类型输出)或者253(整数类型输出)所以推断到移位之后值变成了11111101了
然后我又一位一位的做逻辑比较,结果就是11111101。