热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

则执行C语言语句unsigned,C语言中*(((unsigned char*)result))是什么意思

满意答案cupidxyz2019.04.25采纳率:58%等级:7已帮助:410人unsignedchar是无符号字节型,c

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

cupidxyz

2019.04.25

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:58%    等级:7

已帮助:410人

unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型。整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范为-32768~32767,而unsigned能存储的数据范围则是0~65535。

同样,在32位系统中一个char类型一般为8个bit,所以能存储的数据范围为-128~127,而unsigned char则是0~255,字符型所存储的数据是用来表示字符的,例如ASCⅡ或Unicode。

关于char的符号(选自thinking in C++ 2nd vol1):

signed

is the default and is only necessary with char; char may or may not

default to signed. By specifying signed char, you force the sign bit to

be used.

译:有符号类型是默认(指的是对于其他整型来说)的类型并且仅对于char来说才是必须的。char有可能是signed也有可能是unsigned(我想这可能取决于编译器或具体实现)。但通过显式地指定一个char为signed,你就迫使其成为有符号的字符型

在定义整数变量的型态的时候可以加上 unsigned 或是 signed, 例如 unsigned char unsigned short

(int) unsigned long (int) unsigned int ---------- signed char signed

short (int) signed long (int) signed int -------------- 上面 signed

有加和没有加是一样的意义 加上 unsigned 以后, 1. 所需要的数据储存空间和没有加 unsigned 时是一样的 2. 在使用

printf() 打印时基本上你必须分清楚 unsigned 有影响到的是参数的传递, 使用 %d 或是 %u 基本上是看程序设计者自己的选择

int i=-1; printf("%d %u/n", i, i); 会印出 -1 4294967295 unsigned int i=-1;

printf("%d %u/n", i, i); 也会印出 -1 4294967295 char i=-1; printf("%d %u/n",

i, i); 还是会印出 -1 4294967295 但是 unsigned char i=-1; printf("%d %u/n", i,

i); 则会印出 255 255 这不是 %d 和 %u 的问题, 而是 参数传递时数据转换的问题 (见下面第 3 项) 不一样的地方有下面几个

1. 数据的范围基本上加上 unsigned 以后会变成 2 倍 2. 程序里比较大小的时候 int i=1; int j=-1; if

(i>j) printf("i>j/n"); else printf("in"); 你会发现结果是 i>j

unsigned int i=1; int j=-1; if (i>j) printf("i>j/n"); else

printf("i<&#61;j/n"); 你会发现结果是 i<&#61;j 也就是说 signed 和 unsigned 在比较的时候

compiler 会把 signed int 自动当成 unsigned int 来比较 2. 数据转换的时候 (或是函式呼叫的时候) char

i &#61; -128; int j &#61; i; 变量 i 里面的数据只有 1 个字节, 要放进 变量 j 里面的时候需要做 sign

extension 也就是多出来的 3 个字节 (24 个 bit) 都要 填入原来 i 的 sign bit (第 8 个 bit)

以上例来说 (用二进制表示) i: 10000000 j: 11111111 11111111 11111111 10000000

unsigned char i &#61; -128; int j &#61; i; 由 unsigned 转为 signed 时前面一率补 0 用二进制表示

i: 10000000 j: 00000000 00000000 00000000 10000000 char i &#61; -128;

unsigned int j &#61; i; 还是做 sign extension 用二进制表示 i: 10000000 j: 11111111

11111111 11111111 10000000 函式呼叫的时候会做型态的转变, 例如 void fun(int x) { ... }

呼叫时如果用 unsigned char i&#61;-1; fun(i); 就会自动做转换

00分享举报



推荐阅读
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • This document outlines the recommended naming conventions for HTML attributes in Fast Components, focusing on readability and consistency with existing standards. ... [详细]
  • 本文详细介绍了C语言中链表的两种动态创建方法——头插法和尾插法,包括具体的实现代码和运行示例。通过这些内容,读者可以更好地理解和掌握链表的基本操作。 ... [详细]
  • MySQL DateTime 类型数据处理及.0 尾数去除方法
    本文介绍如何在 MySQL 中处理 DateTime 类型的数据,并解决获取数据时出现的.0尾数问题。同时,探讨了不同场景下的解决方案,确保数据格式的一致性和准确性。 ... [详细]
author-avatar
mobiledu2502858037
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有