位移
c:#include <stdio.h>
#include <string.h>
void print_byte_content(int);
int main()
{
int value;
short before=1920;
short after=1080;
memmove((char*)&value,(char*)&before,2);//低位
memmove((char*)&value+2,(char*)&after,2);//高位
print_byte_content(before);
print_byte_content(after);
print_byte_content(value);
int width=value<<16;//低位往高位移
print_byte_content(width);
width=width>>16;//高位往低位移
print_byte_content(width);
int height=value>>16;
print_byte_content(height);
return value;
}
void print_byte_content(int data)
{
int len;
int byte;
printf("int %d 内存地址上的内容为:\n",data);
for (len=0;len<sizeof(data);len++)
{
printf("%d:\t",len);
for (byte=7;byte>=0;byte--)
printf("%d",(*((char*)&data+len)&(1<<byte)) != 0);
putchar('\n');
}
}
bat内容:
@echo off
0410.exe
set value=%errorlevel%
set /a height="value>>16"
set /a width="value<<16"
set /a width="width>>16"
echo height=%height%
echo width=%width%
pause
结果:
int 1920 内存地址上的内容为:
0: 10000000
1: 00000111
2: 00000000
3: 00000000
int 1080 内存地址上的内容为:
0: 00111000
1: 00000100
2: 00000000
3: 00000000
int 70780800 内存地址上的内容为:
0: 10000000
1: 00000111
2: 00111000
3: 00000100
int 125829120 内存地址上的内容为:
0: 00000000
1: 00000000
2: 10000000
3: 00000111
int 1920 内存地址上的内容为:
0: 10000000
1: 00000111
2: 00000000
3: 00000000
int 1080 内存地址上的内容为:
0: 00111000
1: 00000100
2: 00000000
3: 00000000
height=1080
width=1920
请按任意键继续. . .
printf("%d",(*((char*)&data+len)&(1<<byte)) != 0);
这段看不太懂,请指点一下。
另外:
int width=value<<16;//低位往高位移
这句在我电脑上编译出错是怎么回事呢? SugarCane88 发表于 2020-4-26 07:34
这段看不太懂,请指点一下。
另外:
将【*((char*)&data+len)】这个数与【(1<<byte)】按位与,只有两个比特位都为1结果为1,1 != 0成立,打印1,相反为0;这样就是输出了1个比特位的值,循环8次【(1<<byte)】,每个位都有做比较!
编译器报错,你可以把你的报错信息贴出来看看。我用的devc++ Cool_Breeze 发表于 2020-4-26 08:03
将【*((char*)&data+len)】这个数与【(1
谢谢您的回复,我用的是VC6.0,估计编程环境的问题。
页:
[1]