精品偷拍一区二区三区,亚洲精品永久 码,亚洲综合日韩精品欧美国产,亚洲国产日韩a在线亚洲

  • <center id="usuqs"></center>
  • 
    
  • c++怎么把一個十進制數(shù)轉(zhuǎn)換成二進制,并計算二進制數(shù)最長連續(xù)1和0的長度

    c++怎么把一個十進制數(shù)轉(zhuǎn)換成二進制,并計算二進制數(shù)最長連續(xù)1和0的長度
    其他人氣:425 ℃時間:2020-06-24 14:23:22
    優(yōu)質(zhì)解答
    很簡單.如果這個十進制數(shù)的值在 C/C++ 語言本身所支持的范圍內(nèi),如 char,short,int,long 之類,只需循環(huán) N 次就能得到二進制值.這里的 N 等于數(shù)據(jù)類型的位數(shù),如 char=8,short=16,int=32,long=32.轉(zhuǎn)換的方法就是直接判斷數(shù)據(jù)的每一位,示例代碼(假定要轉(zhuǎn)換一個值在0~4294967295之間的無符號長整型數(shù))如下:
    #include
    #include
    //參數(shù) value 是要轉(zhuǎn)換的數(shù),len1 是要返回的連續(xù)1的最大長度,
    //len0 是要返回的連續(xù)0的最大長度
    void BinaryPrint( unsigned long value,int * len1,int * len0 )
    {
    int i,max0,max1;
    *len1 = 0;
    *len0 = 0;
    max0 = 0;
    max1 = 0;
    //由于要轉(zhuǎn)換的數(shù)值,也就是參數(shù) value 是無符號長整型,占32位,
    //所以循環(huán)32次
    for( i=0; i> i) )
    { //遇到為1的位
    if( max0 )
    { //且之前記下的連續(xù)0長度不為0
    //保存連續(xù)0的最大長度
    if( max0 > *len0 ) *len0 = max0;
    max0 = 0;
    max1 = 1;
    }
    else
    {
    max1++;
    }
    printf( "1" );
    }
    else
    {
    if( max1 )
    { //且之前記下的連續(xù)1長度不為0
    //保存連續(xù)1的最大長度
    if( max1 > *len1 ) *len1 = max1;
    max1 = 0;
    max0 = 1;
    }
    else
    {
    max0++;
    }
    printf( "0" );
    }
    }
    printf( "\n" );
    }
    #define __DO_TEST__ 1
    #if __DO_TEST__
    int main( int argc,char ** argv )
    {
    int max0,max1;
    unsigned long val = 1234567890; //測試值,請任意修改
    printf( "value = %lu:",val );
    BinaryPrint( val,&max1,&max0 );
    printf( "max0 = %d,max1= %d\n",max0,max1 );
    }
    #endif沒看懂,“ * ”這個符號沒用過,不知道代表啥意思……if( value & (0x80000000 >> i))這個十六進制的條件也沒看懂…… 還有我做的那道題只要求int就夠了,不用unsigned long,是直接替換就可以了嗎?星號"*" 有多種含義,而且這是最基本的 C/C++ 知識,所有的 C/C++ 語言教材上都會講到,應(yīng)該能看懂才對,沒看懂說明尚未入門。不過你既然問及,這里就說上幾句:1) 函數(shù) voidBinaryPrint( unsigned long value, int * len1, int * len0 ) 定義中,參數(shù) int * len1 及 int * len0 表示傳入的是整型指針,這里星號"*" 是"指針"(或稱”地址“) 的含義;函數(shù)體中的代碼 *len1 = 0; 則表示給參數(shù)(整型指針 len1 )"賦值" 為0; 代碼 if( max0 > *len0 ) 的 *len0 則表示對整型指針 len0 “取其地址中所保存的值”(或者簡稱“取值”);主函數(shù) intmain( int argc, char ** argv ) 中的 char ** argv 則表示參數(shù) argv 是一個指向“字符指針”(其實理解成“字符串”更好)的“指針”,也可以寫成 char * argv[ ] 是等效的,所以你可以將 char ** argv 理解成是一個 “字符串數(shù)組”。2)代碼 if( value & (0x80000000 >> i))的意思就是“如果第 i 位為1”。3)可以直接參數(shù) value 改成 int 類型。若是改為其它(如 char, short) 類型,相應(yīng)的循環(huán)位置還要改成對應(yīng)位數(shù)(一般char為8位,short為16位, int位數(shù)在有的老舊平臺如 DOS 上的 TurboC 上是16位,現(xiàn)在一般都是32位)。總之,建議先去仔細讀書。
    我來回答
    類似推薦
    請使用1024x768 IE6.0或更高版本瀏覽器瀏覽本站點,以保證最佳閱讀效果。本頁提供作業(yè)小助手,一起搜作業(yè)以及作業(yè)好幫手最新版!
    版權(quán)所有 CopyRight © 2012-2024 作業(yè)小助手 All Rights Reserved. 手機版