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

深圳网页设计培训费用关键词优化价格表

深圳网页设计培训费用,关键词优化价格表,怎么网站建设公司,短网址解码文章目录 1. char 类型的signed 和 unsigned1.1 主要区别1.2 **存储方式**1.3 **符号位解释** 2. int 类型(unsigned 与 signed)**2.1 存储方式****2.2 取值范围****2.3 运算行为****(1) 负数运算****(2) 比较运算** **2.4 何时使用 int 和 unsigned int…

文章目录

  • 1. char 类型的signed 和 unsigned
    • 1.1 主要区别
    • 1.2 **存储方式**
    • 1.3 **符号位解释**
  • 2. int 类型(unsigned 与 signed)
    • **2.1 存储方式**
    • **2.2 取值范围**
    • **2.3 运算行为**
      • **(1) 负数运算**
      • **(2) 比较运算**
    • **2.4 何时使用 `int` 和 `unsigned int`**
      • **(1) 适合使用 `int` 的情况**
      • **(2) 适合使用 `unsigned int` 的情况**
    • **2.5 结论**
  • 3. char int a= -6; 存储原理
    • `char a = -6;` 的底层存储
    • 1. **正数的存储方式**
    • 2. **负数的存储方式(补码)**
    • 3. **存储情况**
      • **存储示例**
      • **验证 C 代码**
    • **总结**

**使用时候千万要注意!特别是char类型(8bit), short类型(16bit) **
signed 类型的 char,由于 signed类型最高bit位 例如char(8bit)最高bit位 bit7被拿去做正负符号位了,所以char类型存储值只有7bit,最大值也就是127,不要给其赋值 超过127了,否则系统会崩溃的!

1. char 类型的signed 和 unsigned

1.1 主要区别

类型取值范围是否可能存储负数编译器行为
unsigned char0 ~ 255不能计算时按无符号处理
char(可能 signed-128 ~ 127可能计算时按补码规则处理

1.2 存储方式

无论 char 还是 unsigned char,在大多数平台(如 x86 和 ARM)上,它们都占 1 个字节(8 bit),存储的二进制数据是相同的。例如:

unsigned char a = 6; // 0000 0110(二进制)
char a = 6;          // 0000 0110(二进制)

存储角度看,它们的二进制表示完全一致

1.3 符号位解释

  • unsigned char(无符号):
    • 取值范围:0 ~ 255
    • 直接解释为无符号整数。
  • char(有符号):
    • 取值范围:-128 ~ 127
    • 最高位(bit7)通常被解释为 符号位(0 表示正,1 表示负)。

例如:

unsigned char a = 200; // 存储二进制: 1100 1000 (200)
char b = 200;          // 存储二进制: 1100 1000

存储上是一样的,但 char b 可能会被解释为 -56(假设使用补码存储方式)。

unsigned char a = 200;
char b = 200;
printf("%d\n", a);  // 输出 200
printf("%d\n", b);  // 可能输出 -56(补码表示)


2. int 类型(unsigned 与 signed)

2.1 存储方式

无论 int 还是 unsigned int,在大多数主流平台(如 x86、ARM) 上,它们通常占 4 个字节(32 位),存储的二进制数据是相同的。例如:

int a = 997;         // 00000000 00000000 00000011 11100101(二进制表示)
unsigned int b = 997;// 00000000 00000000 00000011 11100101(二进制表示)

存储层面,它们的二进制数据是一样的


2.2 取值范围

  • int有符号signed int 的简写)

    • 取值范围(32 位系统)-2,147,483,6482,147,483,647
    • 最高位(bit31)为 符号位(0 表示正,1 表示负)
  • unsigned int无符号

    • 取值范围(32 位系统)04,294,967,295
    • 所有 32 位都用于存储数值,没有符号位

对于 997 这个值来说:

  • 无论 int 还是 unsigned int,它们的存储数据相同,因为 997 在两者的表示范围内
  • 但如果是 -1,则:
    int a = -1;         // 存储二进制: 11111111 11111111 11111111 11111111 (补码表示)
    unsigned int b = -1;// 存储二进制: 11111111 11111111 11111111 11111111 (相同的位模式)
    
    int a = -1; 会被解释为 -1,而 unsigned int b = -1; 会被解释为 4294967295(无符号最大值)。

2.3 运算行为

(1) 负数运算

  • int 支持负数,例如:
    int a = -10;
    printf("%d\n", a); // 输出 -10
    
  • unsigned int 不能存负数,如果赋值 -10,它会发生溢出,实际存的值是:
    unsigned int b = -10; 
    printf("%u\n", b); // 4294967286(因为 -10 以补码存储,解释成无符号数)
    

(2) 比较运算

int x = -1;
unsigned int y = 1;
if (x > y) {printf("x is greater\n");
} else {printf("y is greater\n");
}

你可能期望 x > y 不成立,但 x 实际上存储的是 0xFFFFFFFF(即 4294967295),所以 x > y 实际上是成立的!


2.4 何时使用 intunsigned int

(1) 适合使用 int 的情况

  • 需要存储 负数(如温度、位移、差值计算)。
  • 需要使用 标准算术运算,避免 unsigned 计算带来的异常结果。

(2) 适合使用 unsigned int 的情况

  • 只需要存储 非负整数,例如数组索引、内存地址、文件大小等。
  • 需要存储 更大的正整数(例如 unsigned int 最高可到 4,294,967,295,比 int2,147,483,647 大一倍)。
  • 进行位操作时,unsigned 避免了符号位的干扰。

2.5 结论

类型存储大小(通常)取值范围(32 位)最高位作用负数支持
int(有符号)4 字节(32 位)-2,147,483,6482,147,483,647符号位支持
unsigned int(无符号)4 字节(32 位)04,294,967,295仅数值不支持
  • 在底层存储上,相同值(997)的二进制存储是一样的
  • 区别主要在于数值解释、负数处理、运算规则、比较方式等方面


3. char int a= -6; 存储原理

char a = -6; 的底层存储

char存储负数时 采用 补码(Two’s Complement)表示法。假设 char有符号signed char),存储范围为 -128 到 127

1. 正数的存储方式

8 位有符号整数signed char)中:

  • 正数 直接用 二进制原码 存储,例如:
    • char a = 6;
      • 二进制(原码)00000110(十进制 6)

2. 负数的存储方式(补码)

负数 以补码存储,求 -6 的补码方法:

  1. 先求 6 的二进制(8 位):
    00000110   (6 的原码)
    
  2. 取反(按位取反)
    11111001   (取反)
    
  3. 加 1(得到补码)
    11111010   (-6 的补码)
    

3. 存储情况

如果 char a = -6;,在 内存中存储的是 11111010(十六进制 0xFA)。


存储示例

假设 char a = -6; 在内存地址 0x1000 处存储:

地址       值(十六进制)  值(二进制)
0x1000    0xFA          11111010

验证 C 代码

可以用 C 代码验证:

#include <stdio.h>int main() {char a = -6;printf("a = %d\n", a);printf("a in hex: 0x%X\n", (unsigned char)a);  // 强制转无符号,显示存储值return 0;
}

输出

a = -6
a in hex: 0xFA

可以看到,-60xFA(补码) 形式存储。


总结

  1. 负数在计算机中采用补码存储
  2. -6补码11111010(十六进制 0xFA)。
  3. 计算机在读取 char 时,会按照补码规则解析,所以 0xFA 解释为 -6

⚠️ 注意

  • unsigned char 不会存负数,如果 unsigned char a = -6;,会导致值变成 250(0xFA 解释为无符号)
http://www.dtcms.com/wzjs/110785.html

相关文章:

  • 永久域名怎么注册seoul是哪个国家
  • 青岛知名网站建设多少钱wordpress官网入口
  • 微信网站制作教程百度关键词工具
  • 天津市开发区建设管理局网站免费seo网站优化
  • 花式表白网址百度seo软件是做什么的
  • 旅游网站开发报告国内十大4a广告公司
  • 制作网站首页教案网络营销是干嘛的
  • 公司营业执照可以做几个网站怎样建立一个自己的网站
  • 旅游网站的导航怎么做个人博客网页设计
  • 山东淄博网站建设提高网站搜索排名
  • 长沙网站建设公司有哪些怎样提高百度推广排名
  • 网站未备案怎么做淘宝客北京网站优化公司哪家好
  • 江苏网站建设电话比百度好用的搜索引擎
  • 网站咋做网络游戏推广怎么做
  • 深圳做网站龙华新科湖南中高风险地区
  • 衡天主机怎么做网站微博付费推广有用吗
  • 动态网站开发试题百度账号人工申诉
  • 视频直播网站如何做免费推广有哪些
  • 做网站学好哪些软件广东网站seo策划
  • 某景区网站建设策划书百度指数的主要功能有
  • 深圳最好的区排名杭州网站优化企业
  • 做网站需要申请商标哪些类目网站制作公司怎么样
  • 做财经直播网站红河网站建设
  • 做网站什么框架方便开发网站的流程是
  • 短视频推广的优势天津关键词优化专家
  • 电子商务网站建设实训总结报告影响seo排名的因素有哪些
  • crm系统怎么用seo 页面
  • 建设部网站建造师公示宁波网站推广网站优化
  • 好的做蛋糕网站seo是什么意思职业
  • 马鞍山市网站建设公司搜一搜搜索