当前位置: 首页 > news >正文

c语言数字类型转字符类型,C语言的基本数据类型及数据类型转换

C 语言数据类型包括基本类型、构造类型、指针类型3种,本文主要讨论基本类型。

基本类型包括:整型、字符型、实型和空类型。

其中整型数据包括基本整型(int--16bit)、短整型(short--16bit 一般可用int替代)、长整型(long--32bit);不同的编译系统为整型数据分配的字节数是不相同的,Turbo C 2.0和TurboC++ 3.0为一个整型变量在内存中分配2个字节的存储单元,而VC++6.0则分配4个字节。字符型(8bit,sizeof(char)=1) sizeof(int)=2或者4  int *p ;sizeof (p)=2或4

整型数据还可分为有符号数(signed)和无符号数(unsigned).有符号整型用signed修饰,最高位用于表示符号(0为正数,1为负数)。

基本型

int

2字节

-32768~32767

短整型

short

2字节

-2^15~2^15-1

长整型

long

4字节

-2^31 ~ 2^31-1

无符号整型

unsigned int

2字节

0 ~65535

无符号短整型

unsigned short

2字节

0 ~ 65535

无符号长整型

unsigned long

4字节

0 ~(2^32-1)

下图为+/-25在内存中的表现形式:

0

0

0

0

0

0

0

0

0

0

0

1

1

0

0

1

1

1

1

1

1

1

1

1

1

1

1

0

0

1

1

1

-25在内存中存放为补码形式,符号位为1.

计算机中的数值型数据可以有原码、反码补码。正数的原码反码补码相同,负数的补码:对于-25来说,先求25的二进制值为:1000000000011001(-25的原码);

然后对原码除符号位以外各位取反:11111111111100110(反码),补码=反码+1=1111111111100111。

实型数据:单精度(float:4字节)和双精度(double:8字节)。无论是何种类型的实行数据,在内存中都是以带符号的数据形式存放。

浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。

具体可见另一篇关于“浮点数在计算机中的存储”的文章。

二, 数据类型的转换:

自动类型转换:自动将精度低,表示范围小的运算对象类型向精度高表示范围大的运算对象类型转换。以便得到较高精度的运算结果。

double ←—— float 高

long

unsigned

int ←—— char,short 低

● 图中横向箭头表示必须的转换,在表达式中有char 或者short型数据,一律转换为int 型参加运算。如两个float型数参加运算。

在表达式中有float型,一律转化成double型参加运算。

纵向箭头表示当运算符两边的运算数为不同类型时的转换,如一个long 型数据与一个int型数据一起运算,需要先将int型数据转换为long型, 然后两者再进行运算,结果为long型。所有这些转换都是由系统自动进行的, 使用时你只需从中了解结果的类型即可。这些转换可以说是自动的。

字符型数据是指字母、数字和各种符号等用ASCII值表示的字符,0-127存储的是基本ASCII值,128-255是扩展ASCII值。C语言允许使用signed unsignd 修饰char 类型数据,但是只有在按照整型数据形式输出时,才能显示不同定义的区别。

当赋值运算符两边的运算对象数据类型不一致时,系统会自动将赋值号右边表达式的值转换成左边变量类型后再赋值。具体如下:

(1) 浮点型与整型

● 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。

将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个0。注意:赋值时的类型转换实际上是强制的。

(2) 单、双精度浮点型

● 由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为doub1e型数据参加运算,然后直接赋值。doub1e型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。

(3) char型与int型

● int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。

● char型数值赋给int型变量时, 一些编译程序不管其值大小都作正数处理,而另一些编译程序在转换时,若char型数据值大于127,就作为负数处理。对于使用者来讲,如果原来char型数据取正值,转换后仍为正值;如果原来char型值可正可负,则转换后也仍然保持原值, 只是数据的内部表示形式有所不同。

(4) int型与1ong型

● long型数据赋给int型变量时,将低16位值送给int型变量,而将高16 位截断舍弃。(这里假定int型占两个字节)。

将int型数据送给long型变量时,其外部值保持不变,而内部形式有所改变。

(5) 无符号整数

● 将一个unsigned型数据赋给一个占据同样长度存储单元的整型变量时(如:unsigned→int、unsigned long→long,unsigned short→short) ,原值照赋,内部的存储方式不变,但外部值却可能改变。

● 将一个非unsigned整型数据赋给长度相同的unsigned型变量时, 内部存储形式不变,但外部表示时总是无符号的。

三. C语言输入输出语句

例如:

字符输入函数:getchar 字符输出函数:putchar

格式输入函数:scanf   格式输出函数: printf

字符串输入函数:gets 字符串输出函数:puts

•一般格式:printf(格式控制,输出表列)十六进制无符号形式

%d:以带符号的十进制形式输出整数

%o:以八进制无符号形式输出整数

%x:以十六进制无符号形式输出整数

%u:以无符号十进制形式输出整数

%c:以字符形式输出,只输出一个字符

%s:输出字符串

%f:以小数形式输出单,双精度数,隐含输出六位小数

%e:以指数形式输出实数

%g:选用%f或%e格式中输出宽度较短的一种格式,不输

出无意义的0

(1)d格式符。用来输出十进制整数。

几种用法:

①%d:按十进制整型数据的实际长度输出。

②%md:m为指定的输出字段的宽度。如果数据的位数小于m,

则左端补以空格,若大于m,则按实际位数输出。

例:printf(″%4d,%4d″,a,b);

若a=123,d=12345,则输出结果为

123,12345

③%ld:输出长整型数据。

例:longa=135790;/*定义a为长整型变量*/

printf(″%ld″,a);

(2)o格式符。以八进制整数形式输出。

输出的数值不带符号,符号位也一起作为八进制数的一部分输出。

例:inta=-1;

printf("%d,%o",a,a);

-1在内存单元中的存放形式(以补码形式存放)如下:

1111111111111111

输出为:

-1,177777

不会输出带负号的八进制整数。对长整数(long型)可以

用“%lo”格式输出。还可以指定字段宽度,

例:printf("%8o",a);

输出为:177777。(数字前有2个空格)

(3)s格式符输出字符串.

①%s。例如:

printf(″%s″,″CHINA″)

输出字符串“CHINA”(不包括双引号)。

②%ms,输出的字符串占m列,若串长大于m,则全部输出,若串长

小于m,则左补空格。

③%-ms,若串长小于m,字符串向左靠,右补空格。

④%m.ns,输出占m列,只取字符串中左端n个字符,输出在m列的

右侧,左补空格。

⑤%-m.ns,n个字符输出在m列的左侧,右补空格,若n〉m,m自

动取n值。

例字符串的输出:

#includevoid main()

{

printf(“%3s,%7.2s,%.4s,%-5.3s\n”, “CHINA”, “CHINA”, “CHINA”, “CHINA”);

}

运行结果:CHINA,-----CH ,CHIN,CHI--

(7)f格式符。用来以小数形式输出实数(包括单双精度)

有以下几种用法:

①%f。不指定字段宽度,由系统自动指定字段宽度,使整数

部分全部输出,并输出6位小数。应当注意,在输出的数字中

并非全部数字都是有效数字。单精度实数的有效位数一般为7位。

例输出实数时的有效位数。#include void main()

{floatx,y;

x=111111.111;y=222222.222;

printf(″%f″,x+y);

运行结果:333333.328125

②%m.nf。指定输出的数据共占m列,其中有n位小数。如果

数值长度小于m,则左端补空格。

例   输出实数时指定小数位数。#include void main()

{

float f=123.456;

printf(“%f%10f%10.2f%.2f%-10.2f\n”,f,f,f,f,f);

运行结果:123.455994123.455994      123.46 123.46  123.46

③%-m.nf与%m.nf基本相同,只是使输出的数值向左端

靠,右端补空格。

格式输入函数

•函数作用:按照变量在内存的地址将变量值存进去。

•一般格式:scanf(格式控制,地址表列)

scanf("%d",&a);

相关文章:

  • 李含光c语言程序设计教程百度云,C语言程序设计教程 李含光 郑关胜 清华大学出版社习题答案...
  • 个人密码管理程序c语言,密码管理系统C语言(8页)-原创力文档
  • c语言程序设计数字电位器,可编程数字电位器在AVR单片机中的应用
  • 编程语言与c语言转换,【转】一些变态的编程语言
  • android 位于底部的tab,GitHub - DevinFu/BottomTabBar: Android应用中位于底部的tab栏
  • android studio 程序包r不存在,Android Studio问题!无法解析符号R,找不到与...
  • 麒麟810鸿蒙内核移植,2K魅眼屏+鸿蒙OS系统+麒麟810 华为出大招了
  • C51编程语言的特点 与C的异同点,编程语言异同点归纳之一:注释方法 | 求索阁...
  • 华为鸿蒙系统启示,华为的机遇——鸿蒙系统启示录
  • signature=9721a1ecae6007cb6671337ee094b6b3,Nature Rev Immunol. The dark side of C5a in sepsis
  • html区域滚动原理,实例帮助你了解HTML5滑动区域选择元素Slider element
  • html的语义化怎么理解,关于语义化的HTML结构怎么理解
  • html转换成纯文本,你如何将Html转换为纯文本?
  • html的confirm弹窗样式修改,H5-Mui框架——修改mui.confirm样式
  • html三行三列模式布局,一个CSS上中下三行三列结构的Div布局
  • [笔记] php常见简单功能及函数
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Java的Interrupt与线程中断
  • js正则,这点儿就够用了
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • ng6--错误信息小结(持续更新)
  • V4L2视频输入框架概述
  • Vue2 SSR 的优化之旅
  • webpack4 一点通
  • Web标准制定过程
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 前端面试总结(at, md)
  • 让你的分享飞起来——极光推出社会化分享组件
  • 算法-图和图算法
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 通过几道题目学习二叉搜索树
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (十六)一篇文章学会Java的常用API
  • (一)appium-desktop定位元素原理
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET 5种线程安全集合
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET学习全景图
  • .NET正则基础之——正则委托
  • .net中生成excel后调整宽度
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually