1.1       sizeof关键字 sizeof是c语言关键字,功能是求指定数据类型在内存中的大小,单位:字节 sizeof与size_t类型 1.1       int类型 1.1.1          int常量,变量 int就是32位的一个二进制整数,在内存当中占据4个字节的空间 1.1.2          printf输出int值 %d,输出一个有符号的10进制整数,%u,代表输出一个无符号的十进制整数 1.1.3          printf输出八进制和十六进制 %x,代表输出…
C语言中常用的一般包括const.static.extern.register和volatile这几个.这些是C语言标准中规定的关键词,所有的编译器都必须支持这些关键词,它们的作用如下: 1.const修饰的变量被称为常量,所谓常量,就是不能改变.不能再赋值的变量. 比如int a = 10,定义了一个变量a,并初始化为a = 10,在后续的代码中我们可以随时修改a的值的,可以通过a = 15把a的值修改为15. 但是如果使用const修饰了变量,比如const int a = 10或者int…
主要内容:增加两个整数溢出检测 #include <stdio.h> #include <limits.h> int main(int argc, char *argv[]) { /* * a和b为非负整型变量,检測a+b是否会"溢出" */ // INT_MAX=2147483647 int a=123456789,b=2147483000; /* 方法一: if(a+b < 0) printf("overflow\n"); 错误原因…
以32位的stm32f4为例: 1.  uint32_t t_int_k = 239773, t_int_km1 = 4294859707; 则t_int_k - t_int_km1 > 0; 2. uint16_t t_int_k = 50, t_int_km1 = 100; 则t_int_k - t_int_km1= -50; 3. unsigned int pp = 6; int pq = -20; ;…
把一个预处理指示写成多行要用“\”续行,因为根据定义,一条预处理指示只能由一个逻辑代码行组成. 而把C代码写成多行则不必使用续行符,因为换行在C代码中只不过是一种空白字符,在做语法解析时所有空白字符都被丢弃了. 在Linux的shell命令中亦可使用该换行符,在击回车键之前输入“\”,即可实现多行命令输入. 注意:这种续行的写法要求“\”后面紧跟换行符,中间不能有任何其他的字符. 例: #define uip_ip6addr(addr, addr0,addr1,addr2,addr3,addr4…
C语言中无符号数和有符号数之间的运算 C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. unsigned int和int进行运算 直接看例子来说明问题吧 #include <iostream> using namespace std; int main() { ; unsigned ; if(a > b) cout<<"负数竟然大于正数了!\n";…
#include<stdio.h> void main() { int l=-1; unsigned int c=135; printf("%u\n",l+c); } 这个的结果134,而不是我之前认为的很大的正数,实际上需要注意的是-1(0xffffffff)被提升为unsigned int后是一个差1就溢出的unsigned int,所以相加后结果是134.但是如果l=-10000,那么结果就真是一个很大的正数了,因为不涉及溢出了. C语言中存在两种整数算术运算,有符号…
最近再次复习C++语言,用的教材是<C++ Primer>这本教材, 看到第二章的时候,里面有个问题困扰了我. 于是想上网查查怎么回事, 结果看了很久都没有得到一个满意的答案. 书上有这么一段话:当将一个超出数据类型取值范围的值赋值给这个类型的一个变量时,变量的值的结果由变量的 类型决定. 后面还有这么一段解释: 1.当接受值的变量类型为无符号类型时,  变量的值 =  超出变量范围的值 % 类型可以表示的数值的个数. Exp: unsigned char nTest; nTest = ; 那…
上一篇博客我们讲解了计算机中整数的表示,包括无符号编码和补码编码,以及它们之间的互相转换,个人觉得那是非常重要的知识要点.这篇博客我们将介绍C语言中的有符号数和无符号数以及扩展和截断数字. 1.C语言中的有符号数和无符号数 上一篇博客我们给出了C语言中在32位机器和64位机器中支持的整型类型数据,我们这里只给出32位机器上的: 尽管 C 语言标准没有指定有符号数要采用某种编码表示,但是几乎所有的机器都使用补码.通常大多数数字是默认有符号的,比如当声明一个像12345或者0xABC这样的常量的时候…
因为在C语言标准中,只规定了无符号数的移位操作是采用逻辑移位(即左移.右移都是使用的逻辑左移和逻辑右移).而对于有符号数,其左移操作还是逻辑左移,但右移操作是采用逻辑右移还是算术右移就取决于机器了!(算术右移和逻辑右移的区别是:算术右移不右移符号位,即最高位,右移后前补0还是1取决于符号位的值;逻辑右移执行时将移动符号位,右移后前补0)因此,一个程序如果使用了有符号数的右移位操作,它就是不可移植的了. http://zhidao.baidu.com/link?url=J_LWILg91_X4iY…