leetcode405

孤街浪徒 提交于 2020-02-02 05:48:23

static的用处

1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用

unsigned的用处

1、signed是默认的,表示这个变量是有符号的,可以存储整数和负数
2、unsigned则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负
3、signed存储符号是有代价的,代价就是存储空间中的一个比特位专门用来存储符号,这一位不能表示数值。一般来说,同类型的signed能够存储的数的绝对值大小要小于undigned。
4、unsigned的作用就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32。
5、signed在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned

memset的用处

void *memset(void *s, int ch, size_t n);
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法 [。
memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度.

Leetcode405

给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。

注意:

  1. 十六进制中所有字母(a-f)都必须是小写。
  2. 十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
  3. 给定的数确保在32位有符号整数范围内。
  4. 能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。

示例 1:
输入:
26

输出:
“1a”

示例 2:
输入:
-1

输出:
“ffffffff”

代码如下:

char * toHex(int num){
    unsigned int n=num;//设置为无符号字符,统一化负整数和正整数
    unsigned int k;
    //设置十个位置用来存放十六进制的字符
    static char an[10]={'\0'};
    //存储十六进制字符
    char b[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
    int i=10;//设置进行计数
    if(num==0)
        return "0";
    //将存储字符的数组设置为0,进行初始化
    memset(an,0,sizeof(an));
    //将十进制转化为十六进制
    while(n!=0)
    {
        k=n%16;
       an[i-1]=b[k];
        i--;
        n=n/16;
    }
    //将后面的十六进制字符移动到前面的位置
    for(int j=0;j<(10-i);j++)
        an[j]=an[i+j];
    //字符串后面要加'\0'
    an[10-i]='\0';
    return an;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!