C语言二进制和八进制和十六进制输出

一、C语言整数:int(integer)
 signed:有符号的,可以表示正数和负数。
  unsigned:无符号的,只能表示正数
 short:短的,现在主流的64位操作系统下,整数占用内存4个字节>,使用 4 个字节保存较小的整数绰绰有余,会空闲出两个字节来,这些字节就白白浪费掉了
 long:长的,更长的整数。
 
 整数的取值范围:通过占用的内存推断。一个字节有8个位,表示>的数据的取值范围是2^8-1,即255.如果占用的内存是两个字节,无符号型取值范围是2^8ⅹ2^8-1。如果是有符号,取值范围减半,因为符号一个位。

二进制数、八进制数和十六进制数的书写:表示一个二进制、八进>制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种特殊的写法,具体来说,就是在数字前面加上特定的字符,也就是加前缀。

二进制
二进制由 0 和 1 两个数字组成,书写时必须以0b或0B(不区分大小写)开头。

并不是所有的编辑器都支持二进制数字,只有一部分编辑器支持,并且跟编译器的版本有关系。

如:Notepad++
   TextMate

这些编辑器可能会将二进制文件中的非文本字符解释为特殊字符,从而导致文件内容损坏。

八进制
八进制由 0~7 八个数字组成,书写时必须以0开头(注意是数字 0,不是字母 o)

十六进制
十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,书写
时必须以0x或0X(不区分大小写)开头。

整数的输出:
 %hd、%d、%ld  以十进制、有符号的形式输出short、int、long 类
型的整数。
 
 %hu、%u、%lu  以十进制、无符号的形式输出short、int、long 类
型的整数。

下面介绍几个C语言库函数(个人觉得需要掌握):

int  atoi(const char *nptr);          // 把字符串nptr转换为int整数
long atol(const char *nptr);     // 把字符串nptr转换为long整数
int  abs(const int j);            // 求int整数的绝对值
long labs(const long int j);     // 求long整数的绝对值

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
        char an[12];
        memset(an,0,sizeof(an));
        strcpy(an,"1234");//不要将字符长度超过12,会变为字符>数组,而不是字符串,也不要输入空字符,字符串只会读取到空字符>之前。
        int aa;
        aa=atoi(an);
        printf("整数为%d\n",aa);
        long int ab=atol(an);
        printf("长整数为%ld\n",ab);
        int ac=-11;
        printf("整数ac绝对值为%d\n",abs(ac));
        long int ad=-11111111111111111;
        printf("长整数为%ld\n",labs(ad));
        return 0;
}
注意:atoi()和stol()函数无法将字母或字符字符串转换为整数或长整数,返回值会为0。如果要将字符串转换为整数或长整数,需要在字符串中包含数字字符。(我第一次测试字符串用的ikun,输出结果为0).

二、数据类型的别名:使用 typedef 关键字来给数据类型定义一个别名
,别名一般有两个特点:1)名称更短;2)更符合程序员的习惯。(后期写数据结构代码前详细解决)

三、随机数:
在C语言中,我们使用 <stdlib.h> 头文件中的 srand和rand 函数来生成随机数。
 void srand(unsigned int seed);   // 随机数生成器的初始化函数
int  rand();                        // 获取一个随机数
 srand函数初始化随机数发生器(俗称种子),在实际开发中,我们
可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同,通常我们采用 <time.h> 头文件中的 time 函数即可得到一个精确到秒的时间作为种子。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//C语言中的`sleep`函数需要包含头文件`<unistd.h>`。
#include <unistd.h>
int main()
{
  int ii;

  srand(time(0));  // 播下随机种子
//没有srand也会生成随机数。在使用rand函数生成随机数时,实际上
是利用一个伪随机数生成器,该生成器的初始种子是固定的。如果不>改变种子,那么每次运行程序时,生成的随机数序列都是一样的。因>此,为了得到不同的随机数序列,需要在程序中用srand函数播下不同
的随机种子。srand函数需要传入一个整数值作为种子,该整数值可以
是时间、进程ID等唯一的值,以保证每次播下的种子都不同。这样,>每次生成的随机数序列都是不同的。
 // for (ii=0;ii<5;ii++)  // 生成5个随机数
 while(true)
  {
    printf("%d\n ", rand());  // 获取随机数
    sleep(5);
  }
}

 

生成一定范围随机数
 在实际开发中,需求往往是一定范围内的随机数,对于产生一定范围的随机数,就需要使用一定的技巧,常用的方法是取模运算(取余数),再做一个加法运算:
  int a = rand() % 50;   // 产生0~49的随机数
 
 如果要规定上下限:
  int a = rand() % 51 + 100;   // 产生100~150的随机数。

如果有错误或者值得改进的地方,可以直接讨论,我会持续改进。学习的例子和知识都来自B站码道论坛. 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值