对 unsigned char 先左移 后右移 可以出现两种结果
关于>> << (左移 右移)今天发现一个搞笑问题
首先,我的编译器是VS2010
我在做个C++ Dll的时候发现:
对一个 unsigned char 先左移 后右移 可以出现两种结果:
1.
int n = 4;
unsigned char tempib = 0Xff;
tempib = ( tempib<<n) >> n; //去掉tempib 的前n 位,n是个变量
2.
int n = 4;
unsigned char tempib = 0Xff;
tempib = tempib<<n; //去掉tempib 的前n 位,n是个变量
tempib = tempib>>n;
我的天呀,1 和2的结果不一样呀。1是:0XFF ,2是:0X0F
破编译器,你左移右移变成4字节操作,好吧,我没意见。能不能不要在一个寄存器里,动都不动,直接移动。
骂归骂,我还是挺喜欢这编译器的,那个编译器没有点不爽的地方
首先,我的编译器是VS2010
我在做个C++ Dll的时候发现:
对一个 unsigned char 先左移 后右移 可以出现两种结果:
1.
int n = 4;
unsigned char tempib = 0Xff;
tempib = ( tempib<<n) >> n; //去掉tempib 的前n 位,n是个变量
2.
int n = 4;
unsigned char tempib = 0Xff;
tempib = tempib<<n; //去掉tempib 的前n 位,n是个变量
tempib = tempib>>n;
我的天呀,1 和2的结果不一样呀。1是:0XFF ,2是:0X0F
破编译器,你左移右移变成4字节操作,好吧,我没意见。能不能不要在一个寄存器里,动都不动,直接移动。
骂归骂,我还是挺喜欢这编译器的,那个编译器没有点不爽的地方
...全文
相关推荐
C语言位操作总结.pdf
- 利用位操作实现交换两个变量的值而不使用临时变量:```cvoid swap_xor(unsigned char *pa, unsigned char *pb) { *pa = *pa ^ *pb;
C语言位运算和sizeof运算符详解
例如,如果一个unsigned char变量取反,实际上会先转换成int,然后取反,这可能导致预期之外的结果。3. 异或运算的特性: - **a^0=a**:任何数与0进行异或运算,结果都是原数。
java位运算符.pdf
位运算符主要包括按位非(NOT)、按位与(AND)、按位或(OR)、按位异或(XOR)、右移(Right Shift)、无符号右移(Unsigned Right Shift)以及左移(Left Shift
C底层开发
注意不要超过值限制3.字节对齐:字节对齐让我们先来看下面这个结构体:struct stu1{ int a; char b;}; 来看看 sizeof(stu)的结果为多少?怎么是 8 啊?
深入理解计算机系统(第二版)家庭作业答案
函数先计算 `xsrl`,即通过无符号右移获取 `x` 右移 `k` 位的结果。


