1樓:匿名使用者
11110001右移4位,有不同的右移操作。如果是邏輯右移的話,11110001右移4位之後,得00001111(左側補0);但如果是算術右移的話,11110001右移4位之後,得11111111(左側不變)。
2樓:做而論道
首先-15算不算有符號數?
算。-15用二進位制如何表示?
即:-1111。
15的二進位制是1111,-15的二進位制數是不是15取反+1,-(1111)+1,結果是0001,這個結果那符號位不是負數1啊?
錯了。其中的這一句:-15的二進位制數是不是15取反+1,...
不是。還是11111,最高位1表示負數,1111表示15,這樣是-15?
不是。1111,如果是補碼,它就是代表 -1。
1111,如果是原碼,它就是代表 -7。
暈頭轉向,我學得很不好,希望高手給指點。
其次假設a的二進位制是負數10100110,它的十進位制怎麼計算?
負數,前面要有一個負號:"-"。
10100110,這裡並沒有寫負號,這就是正數。
它的十進位制怎麼計算?--你想要算什麼?加、減、乘、除?
-----------
看來,樓主是沒有分清《數》和《碼》的關係。
對於一個數字,無論它是什麼進位制,負號,都要寫成 "-" 。
變成《補碼》、《移碼》等等之後,才用數字來代表負號。
當用數字代表了符號,就再也不要說這是某某數了,而要說,這是某某數的什麼碼。
另外,變換的時候,應先說明位數,以便給符號,明確一個位置。
c語言中的右移一位是不是應該除以2
3樓:非常可愛
右移一來位相當於除以2。
例:5>>1
5的二自進bai製表示是101,那麼右移一位之du後是zhi10就是2了,是整除的;左移的dao話就是在後面補一個零,相當於是乘以二,那麼變成了1010,十進位制是10。
101右移,就是把最後一位拿掉了,是10這個是二進位制的,十進是2,5/2本來是小數,但這裡是整數操作的,所以把小數部分去掉了。
擴充套件資料
c語言中的左移
1、左移就是把一個數的所有位都向左移動若干位,在c中用《運算子.例如:
inti=1;
i=i<<2;//把i裡的值左移2位。
2、補符號位,就是一個signedchara=0xff;
a=a>>1;/*它仍是0xff,補了符號位。最高位是符號位=1,右移後符號位保持不變*/;
a=0x80;
a=a>>1;/*變成了0xc0*/
a=0x1f;
a=a>>1;/*變成了0x0f,因為它開始的符號位就是0*/。
4樓:幸巴達
(usartdiv - usartdiv_zhengshu)* 16相當bai於(usartdiv - usartdiv_zhengshu)<<4
左移du4位。
你理zhi解的是
dao對的。貌似是專寫**錯了
右移一位屬相當於除以2.
5樓:匿名使用者
不是c語言的有符號整數向右移位運算不等同於除以2的某次冪
如(-1)/2和(-1)>>1,前者的回結果一般答是0,後者一般是-1,所以在c語言中,負數向右移動1位並不等同於除以2。
解決的方法是:當除數是2的n次冪時,x/(2^n),可以用移位操作(x + 2^n - 1) >> n來代替(x + 2^n - 1須小於0,^是乘方操作)
在c語言中,-100/8=-12,而-100>>3=-13,兩者不相等,而用(-100+7)>>3代替則相等。
二進位制轉十進位制演算法,十進位制轉二進位制演算法
我們在網路上經常遇到要ip轉為二進位制來劃分或彙總子網,所以要找一種最快速的十進位制轉二進位制的方法 這種演算法用除16來算,基於我們對16以內的二進位制很熟悉 朋友你也許也奇怪,除16不是算16進製制轉換的嗎?呵呵,下面看來我說.我們用d表示10進製,用b表示2進製 公式是a d 16 b 餘c....
二進位制小數如何轉化為十進位制,如,二進位制小數如何轉化為十進位制,如
毓人 0.101 2 1 2 0 2 1 2 10 0.5 0 2 1 2 10 0.5 2 1 2 10 0.25 1 2 10 1.25 2 10 0.625 10 生活如歌 0.101b 2 1 2 3 0.625 二m進製數與z十s進製數如何轉換 3 二v進製數 十l進製數 對於j較小j的二...
c語言 二進位制轉十六進位制,C語言 二進位制轉十六進位制
看看這個行不行?希望對你有幫助 include stdafx.h include stdio.h include string.h include conio.h include stdlib.h void convert char input,char output for ii nx ii9 0...