您的位置:首页 > 其它

嵌入式开发过程中透彻数据符号的解析

2016-09-13 20:36 274 查看
在单片机开发中,c语言编程如果不指定变量是否有符合时,默认的基础数据类型均为signed(有符号的数据)

现在我们以char为例,说明(signed) r与unsigned 之间的区别

首先单片机数据在内存中,char与unsigned char都是一个占用字节,但是区别就是,char的最高位为符号位,因此char能表示-128(0x80)~127(0x7F), unsigned char没有符号位,因此能表示0(0x00)~255(FF)。

原理如下:

有符号字符型变量 signed char 的取值范围:0 ~ 127:0x00-0x7f 0 000 0000 ---- 0 111 111

-1 ~ -128: 0xFF~0x10 1 111 1111 --- 1000 000

负数的算法;最高位符号位:0为正,1为负

其余位取反再加1即为该数的绝对值:

如:0x10: 1 000 0000,低7位取反:1 (负号) 111 1111=127再加1则为128,所以,该值为-128

再如:0xA4: 1 010 0100, 低7位取反:1 (负号) 101 1011=91再加1则为92,所以,该值为-92

include <stdio.h>

void f(unsigned char v)

{

char c = v;

unsigned char uc = v;

unsigned int a = c, b = uc;

int i = c, j = uc;

printf("----------------\n");

printf("%%c: %c, %c\n", c, uc);

printf("%%X: %X, %X\n", c, uc);

printf("%%u: %u, %u\n", a, b);

printf("%%d: %d, %d\n", i, j);

}

int main(int argc, char *argv[])

{

f(0x80);

f(0x7F);

return 0;

}

输出结果:

----------------

%c: ?, ?

%X: FFFFFF80, 80

%u: 4294967168, 128

%d: -128, 128

----------------

%c: ,

%X: 7F, 7F

%u: 127, 127

%d: 127, 127
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: