c='5';
int b[8];
for (int i =0; i<8; i++)
{
b[i] = ((c >> i) & 1);
cout<<b[i]<<endl;
}
1
0
1
0
1
1
0
0
uj5u.com熱心網友回復:
字符5的ASCII編碼是0x35, 二進制是0011 0101因為你是從個位開始輸出,你再仔細閱讀下自己的程式
uj5u.com熱心網友回復:
謝謝大神,說實在這段代碼我網上找來的,關于位運算,我沒怎么搞明白
想請教下:
1. 此時的回圈,當i=0的時候,是指最低位?還是最高位?
2. >>右移是指,比如一個位元組有8個bit,自左的bit向右邊的bit移動?
3. <<左移是指自右向左移動?
謝謝
uj5u.com熱心網友回復:
for (int i =0; i<8; i++){
b[i] = ((c >> i) & 1);
cout<<b[i]<<endl;
}
寫程式,首先會寫偽代碼
i從0到7回圈
{
b 等于 (c向右移i位,并與1做與運算)
列印b的值
}
展開回圈,
b 等于(c向右移0位,并與1做與運算),也就相當于b等于二進制最低位
0011 0101 右移0位,等于沒移動,并與1做與運算,相當于
0011 0101
0000 0001 &
-------------------
0000 0001
b 等于 (c向右移1位,并與1做與運算)
0011 0101 右移1位,并與1做與運算,相當于
0011 010
0000 0001 &
-------------------
0000 0000
uj5u.com熱心網友回復:
謝謝大神,我好像明白了左移,右移的概念,之前是我理解錯了。
假設二進制 00110101
右移一位就是00011010 最左邊也就是最高位補0,對吧?
同理,左移,右邊(低位位元組補0) ,我這樣理解對嗎?
另外,5不是應該是0000 0101碼?為啥是0011 0101呢?
uj5u.com熱心網友回復:
5和'5'是不一樣的!
uj5u.com熱心網友回復:
謝謝大神,我好像明白了左移,右移的概念,之前是我理解錯了。
假設二進制 00110101
右移一位就是00011010 最左邊也就是最高位補0,對吧?
同理,左移,右邊(低位位元組補0) ,我這樣理解對嗎?
另外,5不是應該是0000 0101碼?為啥是0011 0101呢?
補不補0我不確認,這個你自己做下實驗和查看下相關資料,但是 & 1會把高位清0,只剩下低位
數字5的ASCII碼是0x35,這個你要明白數值5和字符5是不一樣的
電腦上所有存盤或者顯示的都可以看成二進制流,只是編碼的問題。
uj5u.com熱心網友回復:
謝謝你,我想知道的是,比如 "好|",針對GBK字符集, 我如何識別出漢字和|
好|總共三個位元組
漢字的高位第一個bit肯定是1,這個沒疑問。但是低位位元組的最高位也可能是1
為什么這里第一個和第二個位元組是雙位元組的,而第三個位元組是單位元組的呢?
為什么不是第一個位元組是單位元組字符,而第二(假設最高位是1)和第三個位元組構成雙位元組字符呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104414.html
標籤:C++ 語言
上一篇:請問我這個C程式要怎么改?
下一篇:c++運算子多載的一個問題
