首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

C语言-强制类型转换

经常使用东西 强制类型转换这个东西非常频繁被使用,而且如果用好的话,会非常爽,我写个简单例子。.../a.out str:Linux is my world root@ubuntu:~/project# cat 2.c 隐式类型转换 我们写代码时候,在类型转换时候,通常在前面加上类型名字,如果不加的话...,不同类型进行运算,编译器自己去判断如何进行转换,这种方式就是隐式类型转换。.../a.out x = 107, z = 108.000000 显式类型转换 此过程也称为类型转换,它是用户定义。在这里,用户可以键入强制转换结果以使其具有特定数据类型。...C语法: (类型)表达 举个例子 #include int main() { double x = 1.2; int sum = (int)x +

2.3K30

C语言】强制类型转换原理

---- ---- 一、对指针进行强制类型转换 1.1printf打印时转换形式 int main() { int a = 5; printf("%lf", a); return 0; } 解释代码...5二进制代码,然后进行结果打印(如果这里不清楚浮点型读取方法的话,可以去看我之前博客,整形存储) 1.2用指针操作符转换形式 int a = 1234567890; float *f = (...,不怨人家代码,还得怨你自己能力不够,能看懂的人自然能看懂,你能力不够怨不得谁,这话也是说给我自己哈 比较隐藏地方就是,把那个浮点数+0.5赋值给了整型变量b里面了,这其实就是进行 了一个比较隐含对变量进行强制类型转换...这里给大家放了两端代码,其实还想另外对比一下单精度浮点型和双精度浮点型区别,我们把1234567890这么大整型数字存到内存后,将其强制类型转换为浮点型然后打印,其实就变成了原有的数字后面带上小数位...我们只要将类型改成double就行了 2.3总结 变量强制类型转换和指针强制类型转换,本质就在于一个改变了其内存二进制存储形式,一个未改变其内存二进制存储形式

1.2K10

c语言结构体字节对齐详解

1.什么是字节对齐 在c语言结构体里面一般会按照某种规则去进行字节对齐。...sizeof(struct st1) = 16 //64位下 sizeof(struct st1) = 24 struct st2 { char a; char b; char c;...那么我们可以总结出对齐规则如下: 在所有结构体成员字节长度都没有超出操作系统基本字节单位(32位操作系统是4,64位操作系统是8)情况下,按照结构体中字节最大变量长度来对齐; 若结构体中某个变量字节超出操作系统基本字节单位...所以说,字节对齐根本原因其实在于cpu读取内存效率问题,对齐以后,cpu读取内存效率会更快。...但是这里有个问题,就是对齐时候0x00000002~0x00000004这三个字节是浪费,所以字节对齐实际上也有那么点以空间换时间意思,具体写代码时候怎么选择,其实是看个人

2.3K10

C语言数据强制类型转换

定义:强制类型转换是把变量从一种类型转换为另一种数据类型。        强制类型转换算是C语言中常见常考一项内容,如对于类型处理不好,将会产生错误结果。...例如,由于各操作数大小不同,硬件不能将 char 型( 1 字节)数据与 int 型( 2 或 4 字节)数据直接参与运算;由于存储方式不同,也不能将 int 型数据与 float 型数据直接参与运算...所有这些转换都是由系统自动进行, 使用时你只需从中了解结果类型即可。这些转换可以说是自动,但然,c语言也提供了以显式形式强制转换类型机制。 ...注意:赋值时类型转换实际上是强制。  (2) 单、双精度浮点型  ● 由于c语言浮点值总是用双精度表示,所以float 型数据只是在尾部加0延长为doub1e型数据参加运算,然后直接赋值。...(这里假定int型占两个字节)。  将int型数据送给long型变量时,其外部值保持不变,而内部形式有所改变。

1.1K20

网络字节序与主机字节转换

查看这些函数解析,会发现这些函数其实是与主机字节序和网络字节序之间转换有关。就是什么网络字节序,什么是主机字节序呢?...时addrSrv.sin_addr.S_un.S_addr必须是赋值IP地址网络字节序,htonl函数作用是把一个主机字节转换为网络字节序,也就是上面转换过程中第二步转换为第三步作用,127.0.0.1...可见inet_addr函数转换作用就是上面的第一步到第三步转换。 下面再看端口主机字节序与网络字节转换。以6000端口为例。...addrSrv.sin_port=htons(6000);可以直接写为 addrSrv.sin_port=28695;结果是一样,htons作用就是把端口号主机字节转换为网络字节序。...http://hi.baidu.com/feng411215/blog/item/c61764340161c8365ab5f521.html (百度空间)

1.1K20

c语言时间戳转换日期格式_c语言时间转换为时间戳

大家好,又见面了,我是你们朋友全栈君。 时间戳是计算机中记录时间一种方法,某一时刻时间戳指的是从 1970 年 1 月 1 日 0 时 0 分 0 秒开始到该时刻总共过了多少秒。...n 除以一年时间(秒)years 商加上 1970 就是具体年份 y,余数再除以一月时间(秒)months 商加 1 就是月份 m,再次得到余数除以一天时间(秒)days 商加 1 就是日期...d,第三次得到余数除以 3600 商就是小时数 H,第四次得到余数除以 60 商就是分 M 和余数就是秒 S。...)相互转换过程。...图 1:普通时间值和时间戳(秒单位值)相互转换 算法描述 代码清单 1:C语言程序源代码(时间戳) #include #include int main( ) { system(“color

7K30

【编程基础】C语言类型转换

我们在编程序时候,经常会出现不同类型数据之间需要计算、赋值,必然会出现类型转换问题。C语言变量数据类型是可以转换转换方法有两类,一种是自动转换,一种是强制转换。...自动转换 这种转换发生在不同数据类型量混合运算或赋值时,由编译系统自动完成。自动转换遵循以下规则: 1,若参与运算量类型不同,则先转换成同一类型,然后进行运算。...3,所有的浮点运算都是以双精度进行,即使仅含float单精度量运算表达式,也要先转换成double型,再作运算。 4,char型和short型参与运算时,必须先转换成int型。...强制类型转换 强制类型转换是通过类型转换运算来实现,形式为在要转换数值或者表达式前用小括号将要类型括起来。...2,无论是强制转换或是自动转换,都只是为了本次运算需要而对变量数据长度进行临时性转换,而不改变数据说明时对该变量定义类型,也就是被强制转换变量或表达式本身还是原来类型。

2K130

C语言编程—强制类型转换

强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型值到一个简单整型中,您需要把 long 类型强制转换为 int 类型。...类型转换可以是隐式,由编译器自动执行,也可以是显式,通过使用强制类型转换运算符来指定。在编程时,有需要类型转换时候都用上强制类型转换运算符,是一种良好编程习惯。...: Value of sum : 116 在这里,sum 值为 116,因为编译器进行了整数提升,在执行实际加法运算时,把 'c' 转换为对应 ascii 值。...常用算术转换 常用算术转换是隐式地把值强制转换为相同类型。...: Value of sum : 116.000000 在这里,c 首先被转换为整数,但是由于最后值是 float 型,所以会应用常用算术转换,编译器会把 i 和 c 转换为浮点型,并把它们相加得到一个浮点数

21530

C语言字节对齐问题分析2

因此,我们写c程序为了获得更高运行效率就必须最大限度满足cpu对于字节对齐要求,编译器在其中起着至关重要作用。...下面的c程序在编译后运行,在终端将会打出”size of type_t is 8”。为什么是8而不是5呢?这是因为编译器考虑到了运行效率,从而将type_t做了4字节对齐处理。...为此,cpu从内存中存取数据时总是以4字节为边界进行存取。如果,我们所写程序只需要访问内存中一个字节,此时也需要从内存读入4个字节吗?是的。...对于一次内存所存取4个字节中,我们是需要存取其中一个字节、两个字节或者全部4个字节,cpu如何区分呢?答案是,cpu提供了不同指令,而由编译器根据情况选择使用不同指令。...此外,更为麻烦是对于边界不对齐b,还得将其合成4字节(一部分是来自一个四字节b0、b1和b2,另一部分来自另一个4字节b3),而这又增加了程序复杂性,即需要更多指令来完成。

1.5K20

C语言 - 结构体所占字节

(n)默认值为8,则最终b对齐参数为4,接下来地址相对于结构体起始地址偏移量为1,1不能够整除4,所以需要在a后面填充3字节使得偏移量达到4,然后再为b分配4字节空间;   对于变量c,它自身对齐参数为...2,#pragma pack(n)默认值为8,则最终c对齐参数为2,而接下来地址相对于结构体起始地址偏移量为8,能整除2,所以直接为c分配2字节空间。   ...此时结构体所占字节数为1+3+4+2=10字节   最后由于a,b,c最终对齐参数分别为1,4,2,最大为4,#pragmapack(n)默认值为8,则结构体变量最后大小必须能被4整除。...,所以需要在s1后面填充4字节达到16,再为b分配8字节空间;   对于变量c,它自身对齐参数为4,#pragma pack(n)默认值为8,则c最终对齐参数为4,接下来相对于结构体其实地址偏移量为...24,能够被4整除,所以直接为c分配4字节空间。

1.4K51
领券