昨天在pa資料,突然想到這玩意其實也可以拿來分享,於是就有了這一篇文章。
第一個是比較簡單的,也是職場上面試很愛考的東西,趴資料,有時候,我們會希望能用一個變數,就將我們想要的資料傳給對方,就會用到這個。
假設,今天是2020/03/03,那麼是不是需要YYYY MM DD 這麼多的變數? 但,我們也可以把20200303變成一整串字串,
我們可以用UINT32的方式來記:
UINT32 date=0x20200303;
這樣可不可以? 當然可以,於是,我們就記起來了;那如何拆開來? 其實這也真的很簡單。
如何輸出
2,0,2,0,0,3,0,3
首先,我們先了解一下甚麼是UINT32 !
UINT32就是無號整數的32位元,同系列家族的其實還有UINT8,UINT16,UINT64。
而我們可以理解的是
UINT32 date = 0x12345678
=>0x1 | 0x02 | 0x003 | 0x0004 | 0x00005 |0x000006 | 0x0000007 | 0x00000008
這裡要注意的是!!! 0x就是(16進制的意思)!!!
0x00000008 = 1*8 = 8
0x00000070 = 16*7 = 112
0x00000600 = 256*6 = 1536
0x00005000 = 4096*5 = 20480
0x00040000 = 65536*4 = 262144
0x00300000 = 1048576*3 = 3145728
0x02000000 = 16777216*2 = 33554432
0x10000000 = 268435456*1= 268435456
以上,相加起來 = 305419896
/*
想驗證的話,可以直接去跑一下程式,你就UINT32 xxx = 0x12345678;
然後直接看10進制就好,我是因為要教學才一個一個按計算機的啊....!!
*/
好,接下來,我們來寫點code吧 !
for (int i = 7; i >= 0; i--)
{
cout << hex << ((index >> (i * 4)) & 0xf) << endl;
}//1 2 3 4 5 6 7 8
for (int i = 0; i <8 ; i++)
{
cout << hex << ((index >> (i * 4)) & 0xf) << endl;
}//8 7 6 5 4 3 2 1
變化一下(兩個兩個輸出)
for (int i = 3; i >= 0; i--)
{
cout << hex << ((index >> (i * 8)) & 0xff) << endl;
}//12 34 56 78
在變化一下(binary的方式)
void print_binary(uint32_t x)
{
unsigned char *p = (unsigned char *)&x;
unsigned char byte;
for (int i = sizeof(uint32_t) - 1; i >= 0; i--)
{
for (int j = 7; j >= 0; j--)
{
byte = (p[i] >> j) & 1;
printf("%u", byte);
if (0 == (j % 4))
printf(" ");
}
}
printf("\n");
}//0001 0010 0011 0100 0101 0110 0111 1000