一个十进制数short n = 4544 两个字节
%256:取低八位
十进制形式:4544%256=192
二进制形式:
00010001 11000000&
00000000 11111111 =
00000000 11000000
十六进制形式:
0x11c0&0x00ff=0xc0
/256:取高八位
十进制形式:4544/256=17
二进制形式:
00010001 11000000&
11111111 00000000 >>24=
00010001 00000000
十六进制形式:
0x11c0&0xff00>>24=0x11
下面是取int变量各个字节的代码:
#include <iostream>
#include <bitset> //输出二进制
using namespace std;
int main()
{
int a = 4544;
//输出二进制
cout << "高8位" << bitset<8>(a >> 24) << endl; //00000000
cout << "9-18位" << bitset<8>((a << 8) >> 24) << endl; //00000000
cout << "19-24位" << bitset<8>((a << 16) >> 24) << endl; //00010001
cout << "低8位" << bitset<8>((a << 24) >> 24) << endl; //11000000
//输出10进制,有点问题,低八位1100000000左移变为11000000 00000000 00000000 00000000
//右移变为11111111 11111111 11111111 11000000 所以输出为-64
cout << "高8位" << (a >> 24) << endl; //0
cout << "9-18位" << ((a << 8) >> 24) << endl; //0
cout << "19-24位" << ((a << 16) >> 24) << endl; //17
cout << "低8位" << ((a << 24) >> 24) << endl; //-64
//输出10进制 0x是零x 不是大写Ox
cout << "高8位" << ((a & 0xff000000) >> 24) << endl; //0
cout << "9-18位" << ((a & 0x00ff0000) >> 16) << endl; //0
cout << "19-24位" << ((a & 0x0000ff00) >> 8) << endl; //17
cout << "低8位" << (a & 0x000000ff) << endl; //192
//输出8进制
cout << "高8位" << oct <<((a & 0xff000000) >> 24) << endl; //0
cout << "9-18位" << oct << ((a & 0x00ff0000) >> 16) << endl; //0
cout << "19-24位" << oct << ((a & 0x0000ff00) >> 8) << endl; //17
cout << "低8位" << oct << (a & 0x000000ff) << endl; //192
//输出16进制
cout << "高8位" << hex << ((a & 0xff000000) >> 24) << endl; //0
cout << "9-18位" << hex << ((a & 0x00ff0000) >> 16) << endl; //0
cout << "19-24位" << hex << ((a & 0x0000ff00) >> 8) << endl; //17
cout << "低8位" << hex << (a & 0x000000ff) << endl; //192
system("pause");
return 0;
}