不赞同,先看左移,VC6下是这样
代码:
8: unsigned char i=0x09; 0040B768 mov byte ptr [ebp-4],9 9: char j=0x09; 0040B76C mov byte ptr [ebp-8],9 10: i<<=1; 0040B770 mov al,byte ptr [ebp-4] 0040B773 shl al,1 0040B775 mov byte ptr [ebp-4],al 11: j<<=1; 0040B778 mov cl,byte ptr [ebp-8] 0040B77B shl cl,1 0040B77D mov byte ptr [ebp-8],cl
可以看到有符号的和无符号的都是shl,都做为逻辑左移,原因是shl和sal操作是一样的。
再看右移:
代码:
8: unsigned char i=0x09; 0040B768 mov byte ptr [ebp-4],9 9: char j=0x09; 0040B76C mov byte ptr [ebp-8],9 10: i>>=1; 0040B770 mov al,byte ptr [ebp-4] 0040B773 shr al,1 0040B775 mov byte ptr [ebp-4],al 11: j>>=1; 0040B778 mov cl,byte ptr [ebp-8] 0040B77B sar cl,1 0040B77D mov byte ptr [ebp-8],cl
带符号j用的是sar,而无符号的i用的是shr,两个确实不同。
|