精华内容
下载资源
问答
  • C语言整数

    千次阅读 2019-08-03 20:10:15
    整数是我们生活中常用的数据类型,也是编程中常用的一种数据,C语言使用int关键字来定义整数变量(int 是 integer 的简写)。 在定义变量的时候,可以加signed、unsigned、short和long四种修饰符。 s...

     

    整数的概念

           在之前的章节中,我们已经用过整数了,也定义过整型变量,好像没什么好讲的,整数就是整数。

           整数是我们生活中常用的数据类型,也是编程中常用的一种数据,C语言使用int关键字来定义整数变量(int 是 integer 的简写)。

           在定义变量的时候,可以加signed、unsigned、short和long四种修饰符。

            signed:有符号的,可以表示正数和负数。

           unsigned:无符号的,只能表示正数,例如数组的下标、人的身高等。

           short:短的,现在主流的64位操作系统下,整数占用内存4个字节,使用 4 个字节保存较小的整数绰绰有余,会空闲出两个字节来,这些字节就白白浪费掉了。现在个人电脑的内存都比较大了,配置低的也有2G,浪费一些内存无所谓;而在C语言被发明的早期,或者在单片机和嵌入式系统中,内存都是非常稀缺的资源,所有的程序都在尽可能节省内存。

           long:长的,更长的整数。

    整数的取值范围

           整数的取值范围与计算机操作系统和C语言编译器有关,没有一个固定的数值,我们可以根据它占用的内存大小来推断它的取值范围。

           一个字节有8个位,表示的数据的取值范围是28-1,即255。

           如果占用的内存是两个字节,无符号型取值范围是28ⅹ28-1。

           如果占用的内存是四个字节,无符号型取值范围是28ⅹ28ⅹ28ⅹ28-1。

           如果占用的内存是八个字节,无符号型取值范围是28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28-1。

           如果是有符号,取值范围减半,包括负数部分。

           下面用一个示例代码来测试各种整数占用内存的大小。

           示例(book60.c)

          

           运行结果

          

           sizeof是C语言中保留关键字,是一种运算符,不是函数,sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位。

                  int ii;

                  sizeof(int)和sizeof(ii)都可以。

           根据book60.c的测试结果,我们可以得到各种整数的取值范围。

    类型简写

    类型全称

    长度

    取值范围

    short

    [signed] short [int]

    2字节

    -32768~32767

    unsigned short

    unsigned short [int]

    2字节

    0~65535

    int

    [signed] int

    4字节

    -2147483648~2147483647

    unsigned int

    unsigned [int]

    4字节

    0~4294967295

    long

    [signed] long [int]

    8字节

    -9223372036854775808~9223372036854775807

    unsigned long

    unsigned long [int]

    8字节

    0~18446744073709551615

           注意:

           1)计算机用最高位1位来表达符号,unsigned修饰过的正整数不需要符号位,在表达正整数的时候比signed修饰的正整数取值大一倍。

           2)在写程序的时候,上表中括号[]的单词可以省略不书写。

           3)在写程序的时候,给整数变量赋值不能超出变量的取值范围,编译的时候会出现类似以下的错误,程序运行也可能产生不可预后的后果。

          

           4)现在计算机的内存不值钱,建议程序员少用short,慎用int,多用long,内存不是问题,程序的稳定高于一切。

    整型的输出

           以下表格中,重点记住第一、二行十进制的输出格式,二十年来,八进制数我从来没有用过,十六进制数只在显示内存的地址时见过,所以大家不必关心八进制和十六进制的相关知识,了解即可。

     

    %hd、%d、%ld

    以十进制、有符号的形式输出int、long 类型的整数

    %hu、%u、%lu

    以十进制、无符号的形式输出int、long 类型的整数

    %ho、%o、%lo

    以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数

    %#ho、%#o、%#lo

    以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数

    %hx、%x、%lx
    %hX、%X、%lX

    以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。

    %#hx、%#x、%#lx
    %#hX、%#X、%#lX

    以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。

           注意一个坑:输出格式控制符的类型最好与变量的类型一一对应,否则会出现意外的后果,示例:

                  int i=32767;

                  printf("i %hd,%d\n",i,i);

                  int j=32768;

                  printf("j %hd,%d\n",j,j);

           输出结果:

                  i 32767,32767

                  j -32768,32768     // 得到了意外的输出结果

           %hd用于输出短整数,最大值是32767可以输出32767,但不能正常的输出32768

           用一个小碗去装一桶水,道理上说不过去。

           补充一个常用的输出方法,在输出的整数前补0,例如今天是2019年6月5日,输出可以这么写:printf("%d-%02d-%02d",2019,6,5),结果是2019-06-05,月份和日期如果不够两位,就在前面补0。

    二进制数、八进制数和十六进制数的书写

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

    1、二进制

           二进制由 0 和 1 两个数字组成,使用时必须以0b0B(不区分大小写)开头,例如:

                  // 以下是合法的二进制

                  int a = 0b101;      // 换算成十进制为 5

                  int b = -0b110010;  // 换算成十进制为 -50

                  int c = 0B100001;   // 换算成十进制为 33

                  // 以下是非法的二进制

                  int m = 101010;  // 无前缀 0B,相当于十进制

                  int n = 0B410;    // 4不是有效的二进制数字

           请注意,标准的C语言并不支持上面的二进制写法,只是有些编译器自己进行了扩展,才支持二进制数字。换句话说,并不是所有的编译器都支持二进制数字,只有一部分编译器支持,并且跟编译器的版本有关系。

    2、八进制

           八进制由 0~7 八个数字组成,使用时必须以0开头(注意是数字 0,不是字母 o),例如:

                  // 以下是合法的八进制数

                  int a = 015;      // 换算成十进制为 13

                  int b = -0101;    // 换算成十进制为 -65

                  int c = 0177777;  // 换算成十进制为 65535

                  // 以下是非法的八进制

                  int m = 256;  // 无前缀 0,相当于十进制

                  int n = 03A2;  // A不是有效的八进制数字

    3、十六进制

           十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,使用时必须以0x0X(不区分大小写)开头,例如:

                  // 以下是合法的十六进制

                  int a = 0X2A;   // 换算成十进制为 42

                  int b = -0XA0;  // 换算成十进制为 -160

                  int c = 0xffff;   // 换算成十进制为 65535

                  // 以下是非法的十六进制

                  int m = 5A;    // 没有前缀 0X,是一个无效数字

                  int n = 0X3H;  // H不是有效的十六进制数字

    4、十进制

           十进制由 0~9 十个数字组成,没有任何前缀,和我们平时的书写格式一样,不再赘述。

    5、需要注意的坑

           在现实生活和工作中,我们在写十进制数的时候,为了对齐或其它原因,在数值前面加0是无关紧要的,但是,在C语言中,不要在十进制数前加0,会被计算机误认为是八进制数。

    常用的库函数

           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整数的绝对值

           示例(book61.c)

          

           运行结果

          

    数据类型的别名

           C语言允许程序员使用 typedef 关键字来给数据类型定义一个别名,别名一般有两个特点:1)名称更短;2)更符合程序员的习惯。

           例如unsigned int起个size_t的别名。

                  typedef unsigned int size_t;

                  size_t ii; 等同于 unsigned int ii;

           我喜欢把整数这样起别名:

                  int不变。

                  typedef unsigned int uint;

                  long也不变。

                  typedef unsigned long ulong;

    获取随机数

           在实际开发中,我们会用到随机数这个功能,在C语言中,编写一些关于游戏之类的程序时就需要用到随机数。同时C语言也提供了一个标准库里面一个函数来产生随机数,而对于随机数的产生是根据种子(根据一个数值按照某种公式计算的)来变化的。

    1、生成随机数

           在C语言中,我们使用 <stdlib.h> 头文件中的 srand和rand 函数来生成随机数。

                  void srand (unsigned int seed);   // 随机数生成器的初始化函数

                  int rand ();    // 获一个取随机数

           srand函数初始化随机数发生器(俗称种子),在实际开发中,我们可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同,通常我们采用 <time.h> 头文件中的 time 函数即可得到一个精确到秒的时间作为种子。

           rand函数会随机生成一个位于 0 ~ RAND_MAX 之间的整数。而对RAND_MAX 是 <stdlib.h> 头文件中的一个宏,它用来指明 rand 所能返回的随机数的最大值(CentOS 6.9中是2147483647 )。

     

           示例(book63.c)

          

     

           运行结果

          

    2、生成一定范围随机数

           在实际开发中,需求往往是一定范围内的随机数,对于产生一定范围的随机数,就需要使用一定的技巧,常用的方法是取模运算,再加上一个加法运算:

                  int a = rand() % 50;   // 产生0~49的随机数

           如果要规定上下限:

                  int a = rand() % 51 + 100;   // 产生100~150的随机数

           取模即取余数,rand()%51+100,rand()%51是产生 0~50 的随机数,后面+100保证 a 最小只能是 100,最大就是 50+100=150。

    注意事项

           1)采用gdb调试程序,gdb调试程序是基本技能,与程序员的水平高低无关。只要看不出程序的错误原因,就可以gdb来调试。

           2)写程序不能碰运气,必须对自己写的代码有百分之百的把握,行有行的道理,不行有不行的原因,如果不行,可能是你对某个知识点没搞明白,还有坑,既然有坑,就要解决,不要绕过,要搞清楚原因。

           3)有问题不要埋头苦搞,如果一个问题20分钟还没有解决,就在群中提出来。凡事都有一个度,过之犹如不及,把一个小问题搞半天是浪费时间。

    版权声明

    C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。

    来源:C语言技术网(www.freecplus.net

    作者:码农有道

    如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发我的文章,谢谢!!!

    如果文章有错别字,或者内容有误,或其他的建议或意见,请您留言指正,非常感谢!!!

    展开全文
  • C语言 整数与字符串的相互转换

    万次阅读 多人点赞 2018-06-26 23:22:57
    C语言 整数与字符串的相互转换 一、简述  C语言整数与字符串的相互转换,有广泛应用的拓展函数(非标准库),也可以自己尝试简单的实现。 二、整数转字符串  1、拓展函数itoa  itoa (表示 integer to ...

    C语言 整数与字符串的相互转换

    一、简述

        C语言中整数与字符串的相互转换,有广泛应用的拓展函数(非标准库),也可以自己尝试简单的实现。

    二、整数转字符串

        1、拓展函数itoa

        itoa (表示 integer to alphanumeric)是把整型数转换成字符串的一个函数。

          windows环境下,在<stdlib.h>头文件中有

    char* itoa(int value,char*string,int radix);//value: 要转换的整数,string: 转换后的字符串,radix: 转换进制数,如2,8,10,16 进制等。

    函数源码:

    char* itoa(int num,char* str,int radix)
    {
    	char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//索引表
    	unsigned unum;//存放要转换的整数的绝对值,转换的整数可能是负数
    	int i=0,j,k;//i用来指示设置字符串相应位,转换之后i其实就是字符串的长度;转换后顺序是逆序的,有正负的情况,k用来指示调整顺序的开始位置;j用来指示调整顺序时的交换。
    
    	//获取要转换的整数的绝对值
    	if(radix==10&&num<0)//要转换成十进制数并且是负数
    	{
    		unum=(unsigned)-num;//将num的绝对值赋给unum
    		str[i++]='-';//在字符串最前面设置为'-'号,并且索引加1
    	}
    	else unum=(unsigned)num;//若是num为正,直接赋值给unum
    
    	//转换部分,注意转换后是逆序的
    	do
    	{
    		str[i++]=index[unum%(unsigned)radix];//取unum的最后一位,并设置为str对应位,指示索引加1
    		unum/=radix;//unum去掉最后一位
    
    	}while(unum);//直至unum为0退出循环
    
    	str[i]='\0';//在字符串最后添加'\0'字符,c语言字符串以'\0'结束。
    
    	//将顺序调整过来
    	if(str[0]=='-') k=1;//如果是负数,符号不用调整,从符号后面开始调整
    	else k=0;//不是负数,全部都要调整
    
    	char temp;//临时变量,交换两个值时用到
    	for(j=k;j<=(i-1)/2;j++)//头尾一一对称交换,i其实就是字符串的长度,索引最大值比长度少1
    	{
    		temp=str[j];//头部赋值给临时变量
    		str[j]=str[i-1+k-j];//尾部赋值给头部
    		str[i-1+k-j]=temp;//将临时变量的值(其实就是之前的头部值)赋给尾部
    	}
    
    	return str;//返回转换后的字符串
    }

     

    示例程序:

     

    #include <stdlib.h>
    #include <stdio.h>
    int main()
    {
    	int number1 = 123456;
    	int number2 = -123456;
    	char string[16] = {0};
    	itoa(number1,string,10);
    	printf("数字:%d 转换后的字符串为:%s\n",number1,string);
    	itoa(number2,string,10);
    	printf("数字:%d 转换后的字符串为:%s\n",number2,string);
    	return 0;
    }

     

    效果截图:

     

    2、自己简单实现

    实现代码

    
    #include <stdio.h>
    
    char* Int2String(int num,char *str);//函数声明 
    int main()
    {
    	int number1 = 123456;
    	int number2 = -123456;
    	char string[16] = {0};
    	Int2String(number1,string);
    	printf("数字:%d 转换后的字符串为:%s\n",number1,string);
    	Int2String(number2,string);
    	printf("数字:%d 转换后的字符串为:%s\n",number2,string);
    	return 0;
    }
    
    char* Int2String(int num,char *str)//10进制 
    {
    	int i = 0;//指示填充str 
    	if(num<0)//如果num为负数,将num变正 
    	{
    		num = -num;
    		str[i++] = '-';
    	} 
    	//转换 
    	do
    	{
    		str[i++] = num%10+48;//取num最低位 字符0~9的ASCII码是48~57;简单来说数字0+48=48,ASCII码对应字符'0' 
    		num /= 10;//去掉最低位	
    	}while(num);//num不为0继续循环
    	
    	str[i] = '\0';
    	
    	//确定开始调整的位置 
    	int j = 0;
    	if(str[0]=='-')//如果有负号,负号不用调整 
    	{
    		j = 1;//从第二位开始调整 
    		++i;//由于有负号,所以交换的对称轴也要后移1位 
    	}
    	//对称交换 
    	for(;j<i/2;j++)
    	{
    		//对称交换两端的值 其实就是省下中间变量交换a+b的值:a=a+b;b=a-b;a=a-b; 
    		str[j] = str[j] + str[i-1-j];
    		str[i-1-j] = str[j] - str[i-1-j];
    		str[j] = str[j] - str[i-1-j];
    	} 
    	
    	return str;//返回转换后的值 
    }

    效果截图

    三、字符串转整数

    1、拓展函数
                atoi (表示 alphanumeric to integer)是把字符串转换成整型数的一个函数。
                windows环境下,在<stdlib.h>头文件中

    int  atoi(const char *nptr);//字符串转整数函数,nptr: 要转换的字符串

    源码:

    int  atoi(const char *nptr)
    {
            return (int)atol(nptr);
    }
     
    long  atol(const char *nptr)
    {
            int c;              /* 当前要转换的字符(一个一个字符转换成数字) */
            long total;         /* 当前转换结果 */
            int sign;           /* 标志转换结果是否带负号*/
     
            /*跳过空格,空格不进行转换*/
            while ( isspace((int)(unsigned char)*nptr) )
                ++nptr;
     
            c = (int)(unsigned char)*nptr++;//获取一个字符准备转换 
            sign = c;           /*保存符号标示*/
            if (c == '-' || c == '+')
                c = (int)(unsigned char)*nptr++;    /*跳过'+'、'-'号,不进行转换*/
     
            total = 0;//设置转换结果为0 
     
            while (isdigit(c)) {//如果字符是数字 
                total = 10 * total + (c - '0');     /* 根据ASCII码将字符转换为对应的数字,并且乘10累积到结果 */
                c = (int)(unsigned char)*nptr++;    /* 取下一个字符 */
            }
     
     		//根据符号指示返回是否带负号的结果 
            if (sign == '-')
                return -total;
            else
                return total;  
    }

     

    示例程序:

    #include<stdio.h>
    #include<stdlib.h> 
    
    int main()
    {
    	printf("字符串\"123456\"转换为数字:%d\n",atoi("123456"));
    	printf("字符串\"-123456\"转换为数字:%d\n",atoi("-123456"));
    	return 0;
    }


    效果截图:

     

     

    2、自己简单实现

     

     

    实现源码

    #include<stdio.h>
    
    int String2Int(char *str);//函数声明 
    int main()
    {
    	printf("字符串\"123456\"转换为数字:%d\n",String2Int("123456"));
    	printf("字符串\"-123456\"转换为数字:%d\n",String2Int("-123456"));
    	return 0;
    }
    
    int String2Int(char *str)//字符串转数字 
    {
    	char flag = '+';//指示结果是否带符号 
    	long res = 0;
    	
    	if(*str=='-')//字符串带负号 
    	{
    		++str;//指向下一个字符 
    		flag = '-';//将标志设为负号 
    	} 
    	//逐个字符转换,并累加到结果res 
    	while(*str>=48 && *str<57)//如果是数字才进行转换,数字0~9的ASCII码:48~57 
    	{
    		res = 10*res+  *str++-48;//字符'0'的ASCII码为48,48-48=0刚好转化为数字0 
    	} 
    
        if(flag == '-')//处理是负数的情况
    	{
    		res = -res;
    	}
    
    	return (int)res;
    }
    

     

    截图

     

    四、利用sprintf()函数和sscanf()函数    

           整数转字符串

           测试代码:

             

    #include <stdio.h>
    
    char* Int2String(int num,char *str);//函数声明 
    int main()
    {
    	int number1 = 123456;
    	int number2 = -123456;
    	char string[16] = {0};
    	Int2String(number1,string);
    	printf("数字:%d 转换后的字符串为:%s\n",number1,string);
    	Int2String(number2,string);
    	printf("数字:%d 转换后的字符串为:%s\n",number2,string);
    	return 0;
    }
    
    char* Int2String(int num,char *str)
    {
    	sprintf(str, "%d", num);
    
    	return str;
    
    }
    

           运行结果:

           字符串转整数

           测试代码:

    #include<stdio.h>
    
    int String2Int(char *str);//函数声明 
    int main()
    {
    	printf("字符串\"123456\"转换为数字:%d\n",String2Int("123456"));
    	printf("字符串\"-123456\"转换为数字:%d\n",String2Int("-123456"));
    	return 0;
    }
    
    int String2Int(char *str)//字符串转数字 
    {
    	char flag = '+';//指示结果是否带符号 
    	long res = 0;
    	
    	if(*str=='-')//字符串带负号 
    	{
    		++str;//指向下一个字符 
    		flag = '-';//将标志设为负号 
    	} 
    	
    	sscanf(str, "%ld", &res);
    	if(flag == '-')
    	{
    		res = -res;
    	}
    	return (int)res;
    }

           运行结果:

           

    五、附ASCII码表(部分)

     

    ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符
    0 NUT 32 (space) 64 @ 96
    1 SOH 33 ! 65 A 97 a
    2 STX 34 " 66 B 98 b
    3 ETX 35 # 67 C 99 c
    4 EOT 36 $ 68 D 100 d
    5 ENQ 37 % 69 E 101 e
    6 ACK 38 & 70 F 102 f
    7 BEL 39 , 71 G 103 g
    8 BS 40 ( 72 H 104 h
    9 HT 41 ) 73 I 105 i
    10 LF 42 * 74 J 106 j
    11 VT 43 + 75 K 107 k
    12 FF 44 , 76 L 108 l
    13 CR 45 - 77 M 109 m
    14 SO 46 . 78 N 110 n
    15 SI 47 / 79 O 111 o
    16 DLE 48 0 80 P 112 p
    17 DCI 49 1 81 Q 113 q
    18 DC2 50 2 82 R 114 r
    19 DC3 51 3 83 S 115 s
    20 DC4 52 4 84 T 116 t
    21 NAK 53 5 85 U 117 u
    22 SYN 54 6 86 V 118 v
    23 TB 55 7 87 W 119 w
    24 CAN 56 8 88 X 120 x
    25 EM 57 9 89 Y 121 y
    26 SUB 58 : 90 Z 122 z
    27 ESC 59 ; 91 [ 123 {
    28 FS 60 < 92 / 124 |
    29 GS 61 = 93 ] 125 }
    30 RS 62 > 94 ^ 126 `
    31 US 63 ? 95 _ 127 DEL

     

    展开全文
  • C语言整数比较

    2020-01-28 15:00:38
    C语言整数比较引起的一些问题记录 引入 在大一学习C语言的时候,我习惯的认为以下两个函数是等价的 // 1 float sum_elements(const float a[], size_t length){ float result = 0; for(size_t i = 0; i <= ...

    引入

    在大一学习C语言的时候,我习惯的认为以下两个函数是等价的

    // 1
    float sum_elements(const float a[], size_t length){
        float result = 0;
        for(size_t i = 0; i <= length - 1; ++i){
            result += a[i];
        } // @**@
        return result;
    }
    // 2
    float sum_elements(const float a[], size_t length){
        float result = 0;
        for(size_t i = 0; i < length; ++i){
            result += a[i];
        } // @**@
        return result;
    }
    

    但是, 当传入的length==0时,两个函数却有不同的行为

    在我原来的观念里

    • 函数(1)运行时,是不能进入循环的,因为条件 0 < -1不满足,因而能得到正确的结果

    • 但是,实际情况却是这样

      ➜ 计算机操作系统 ./test                    
      [1]    14319 segmentation fault  ./test
      
    • 这就有问题了,为啥呢?

    这是深入了解计算机操作系统中的一道习题,笔者用的是原书第三版,位置在题2-25

    size_t的定义

    // gcc on linux
    // in header stddef.h
    typedef __SIZE_TYPE__ size_t;
    // __SIZE_TYPE__
    #define __SIZE_TYPE long unsigned int
    

    C语言整数比较

    同种类型的整数比较结果是遵循算术结果的,关键在于不同类型的比较,特别是有符号数和无符号数的比较

    以下是在书中归纳的几条规则

    • 不同类型的操作数进行运算时,按以下方向进行隐式类型转化

      bool->char->short int->int(默认整数类型)->unsigned int->long

      ->unsigned->long long->float->double(默认浮点数类型)

      ->long double

    C语言隐式类型转换

    图来自知乎 链接

    C语言的布尔型变量定义在C99标准中,使用时要include头文件 stdbool.h

    // stdbool.h部分内容
    #ifndef __cplusplus
    #define bool _Bool
    #define true 1
    #define false 0
    #endif
    // false的字节表示为00000000
    // true的字节表示为00000001
    // sizeof(bool)=1
    
    • 于是,会有以下几个神奇的现象

      • size_t(扩展为unsigned long) 和 int进行运算时,会转化成unsigned long进行计算,结果为(size_t)0-(size_t)1=18446744073709551615=(size_t)(-1)
      • 然后是(size_t)i(=0)<=(size_t)(-1)的结果,自然就为1,于是进入循环,然后数组越界
    • 下面是几个示例,来自于课本的第53页(原书第三版)

    exp type value
    0==0U unsigned 1
    -1<0 signed 1
    -1<0U unsigned 0
    INT_MAX > INT_MIN signed 1
    2147483647U > INT_MIN unsigned 0
    INT_MAX>(int)2147483647U signed 1
    -1>-2 signed 1
    (unsigned)-1>-2 unsigned 1
    展开全文
  • C语言整数运算 c语言整数特点 分为有符号和无符号 有符号和无符号运算,会将有符号转换为无符号 默认整数数字都是有符号的 例子 说明:在表达式中没有u或强制类型转换,会按照有符号来运算 关系表达式 类型 ...

    C语言整数运算

    c语言整数特点

    • 分为有符号和无符号
    • 有符号和无符号运算,会将有符号转换为无符号
    • 默认整数数字都是有符号的

    例子

    说明:在表达式中没有u或强制类型转换,会按照有符号来运算

    关系表达式 类型 结果 说明
    0==0U 无符号 1 00…0B=00…0B
    -1<0 有符号 1 11…1B<00…0B
    -1<0U 无符号 0 11…1B>00…0B
    2147483647>-2147483647-1 有符号 1 01…1B>10…0B
    2147483647U>-2147483647-1 无符号 0 01…1B<10…0B
    2147483647>(int)2147483648U 有符号 1 01…1B>10…0B
    -1>-2 有符号 1 11…1B>10…10B
    (unsigned)-1>-2 无符号 1 11…1B>10…10B
    展开全文
  • C语言 整数的逆序

    2019-04-30 09:12:00
    C语言 整数的逆序 整数的分解 一个整数是由1至多位数字组成的,如何分解出整数的各个位上的数字,然后加以计算 对一个整数做%10的操作,就得到它的个位数; 对一个整数做/10的操作,就去掉了它的个...
  • C语言整数转换字符的方法

    千次阅读 2019-06-05 09:40:06
    C语言整数转换字符的方法 char* int_to_change(int i) { int j,buf,a; char* buffer[10]; while(1) { j = i%10; j += 48; buffer[a] = j; i = i/10; a++; if(j == 0) break; } return buffer; }
  • C语言整数分解

    千次阅读 2020-08-19 16:29:27
    将正整数分解为单个数字并打印 输入:123 输出:1 2 3 输入:700 输出:7 0 0 #include<stdio.h> #include<math.h> int main() { int x,count=0; scanf("%d",&x); int t = x; while(x>0){//...
  • c语言整数逆序输出

    万次阅读 多人点赞 2019-01-03 23:37:53
    c语言的逆序输出 第一种: 这种方法的思想是输入的x对10求余,比如123对10求余得3,然后123再除以10的12,逆序时3乘以10,下一轮12对10求余得2, 然后12除以10得1,下一步得到30+2,以此类推; 但是这种方法...
  • C语言整数的输出

    2020-04-17 12:21:53
    整数是我们生活中常用的数据类型,也是编程中常用的一种数据,C语言用int关键字来定义整数变量(int是 integer 的简写)。 在定义变量的时候,可以加signed、unsigned、short和long四种修饰符。 signed:有符号的,...
  • C语言整数排序

    千次阅读 2018-11-28 07:33:39
    输入三个整数x,y,z,请把这三个数由小到大输出。 #include &lt;stdio.h&gt; int main() { int a,b,c,d; scanf("%d,%d,%d",&amp;a,&amp;b,&amp;c); if(a&gt;b) {d=a;a=b;b=d;}...
  • C语言整数相加

    千次阅读 2018-03-09 13:08:57
    实现两个整数相加:#include &lt;stdio.h&gt;int main(){ int a; int b; printf("请输入两个整数:"); scanf("%d %d", &amp;a, &amp;b); printf("%d + %d = %d\n", a...
  • C语言 整数大小比较

    千次阅读 2019-04-16 11:12:48
    输入两个整数,比较它们的大小。 输入格式 一行,包含两个整数 x 和 y,中间用单个空格隔开。 0≤x<2^32, −2^31 ≤y < 2^31 。 输出格式 一个字符: 若 x>y,输出’>’; 若 x=y,输出’=’; 若 x<...
  • C语言整数的取值范围

    2020-04-13 15:50:47
    整数是我们生活中常用的数据类型,也是编程中常用的一种数据,C语言使用int关键字来定义整数变量(int是 integer 的简写)。 在定义变量的时候,可以加signed、unsigned、short和long四种修饰符。 signed:有符号的...
  • C语言整数四则运算

    千次阅读 2020-05-23 16:52:08
    本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、...
  • c语言 整数四则运算

    千次阅读 2020-07-19 15:19:17
    整数四则运算 计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 ...
  • C语言整数的素数因子分解 给定某个正整数 N,求其素因子分解结果 输入格式: 输入long int范围内的正整数 N。 输出格式: 按给定格式输出N的素因式分解表达式,即 N=p1^k1*p2^k2*…*pm^km 其中pi为素因子...
  • C语言 整数形式输出

    千次阅读 2019-02-04 10:46:37
    对于整数,还可用八进制、无符号形式(%o(小写字母o))和十六进制、无符号形式(%x)输出。对于unsigned型数据,也可用%u格式符,以十进制、无符号形式输出。 所谓无符号形式是指,不论正数还是负数,系统一律当作...
  • C语言整数的因式分解

    2020-04-02 23:16:42
    https://blog.csdn.net/qq_17441227/article/details/78570335 1.整数的因式分解 #include<stdio.h> int main() { int n,i; printf("Plz input int:"); scanf("%d",&n); prin...
  • c语言整数表示

    千次阅读 2014-11-14 16:26:56
    的,那么memcpy会把它当做非常大的正整数,并且试图将这样的多字节的数据从内核区域复制到用户缓冲区。虽然复制这么多字节实际上不会完成,因为程序会遇到进程中非法地址的错误,但是程序还是能读到没有被授权的内核...
  • 自己写的整数输入的代码,不使用指针使用数组,调试比较完善
  • C语言 整数字符串转换成int整数

    千次阅读 2017-10-12 16:20:39
    整数字符串变数字 */ #include #include #include int strToNumber(); int powTen(int n);//返回10的n次方 void main() { printf("你输入的整数位%d\n",strToNumber());//读入整数字符串,返回int整数 } int powTen...
  • #include<stdio.h> int main(){ int n; void fun(int); printf("请输入数字:"); scanf("%d",&n); fun(n); } void fun(int n){ int t; t=n%10; if(n/=10) fun(n); printf("%c ",t+48);......
  • #include #include void to_str(n) int n; { char s[10]; int i = 0; if(n) { putchar('-'); n = -n; } do { s[i++] = n%10 +'0'; n/=10; } while(n>0); while(i--)putchar(s[i]);...
  • C语言整数相加溢出判断的三种方法

    千次阅读 2018-04-22 20:07:59
    C语言有两类整数算术运算,有符号运算与无符号运算,在计算两数的加减乘除运算,往往要考虑溢出的情况例:检查两个非负整型变量a+b是否溢出第一种:if(a+b &lt; 0)complain();这种做法是检查内部寄存器的标志位...
  • #include<stdio.h>int doublepow(int n, int m) { int i = 1; int sum = n; for(i = 1; i; i++) { sum = sum * n; } return sum; } int main() { int n; int m; scan
  • ``` #include #include int main() { ... int days[]={'31','28','31','30','31','30','31','31','30','31','30','31'};...我想做个小程序,写入12个月的天数,然后输出,但是输出的结果有点吓人,数特别大,咋整?
  • C语言整数与字符串相互转换库函数

    千次阅读 2017-08-09 21:21:16
    C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。 1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,017
精华内容 12,406
关键字:

c语言整数

c语言 订阅