- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我快速浏览了 C++03 标准,但仍然无法判断是否可以保证此行为:
signed char cNegOne=-1; //char is 8bits
unsigned int a=cNegOne; //int is 32 bits in my Windows system
printf("0x%x\n",a);
结果是:
0xffffffff
VC++ 在 32 位 Windows 中给出 0xffffffff
。但我的假设是转换可能以两种方式发生:
1) 首先将 8 位有符号 char -1 直接转换为 8 位无符号值,即二进制 11111111 或十进制 255,然后扩展为 32 位无符号整数,也给出 255 (0xff)。
2) 8 位有符号字符 -1 有符号扩展为 32 位有符号整数,给出 0xffffffff,然后重新解释为 32 位无符号整数。
很明显这里用的是第二种方式。但为什么会这样呢?在标准中,我找不到任何关于此的内容。它是特定于实现的吗?
编辑:原文来自C++03 Chapter 4
标准转换是为内置类型定义的隐式转换。第 4 条列举了全套此类转换。标准转换序列是按以下顺序排列的标准转换序列:
— 以下集合中的零次或一次转换:左值到右值的转换、数组到指针的转换和函数到指针的转换。
——来自以下集合的零个或一个转换:整数提升、浮点提升、整数转换、浮点转换、浮点整数转换、指针转换、指向成员转换的指针,以及 bool 转换。
— 零个或一个资格转换。
请注意,保证顺序是 l 到右值的转换(等)发生在集合积分提升/转换之前,但这并不意味着积分提升必须发生在转换之前 - 它们只是在同一个集合中. 或者我的解释是否正确?
最佳答案
在 C 和 C++ 中执行整数运算时,第一步是整数提升。带符号的字符和短裤变成带符号的整数;无符号字符和短裤成为无符号整数。即使您将两个短裤相加也是如此:操作本身是对整数而不是短裤执行的。
因此,当您考虑整数转换时,请先考虑提升,然后是符号更改。在 C++ 标准中,这两个步骤被描述为一个步骤。也就是说,技术上不会发生单独的整体提升,但如果目标类型比源类型宽,则更改符号的效果与如果在符号更改之前显式提升会发生的效果相同。基本规则是结果必须是输入模 2^n,其中 n 是输出类型的位数。对于 -1 的输入和 32 位输出类型,这意味着 2^32 - 1 的输出。
关于c++ - Signed Char 到 Unsigned Int 转换的标准 C++ 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41011632/
我提出这个问题是因为我没有找到关于这 3 个 gpg 选项之间差异的明确解释: gpg --sign file # produces file.gpg gpg --clear-sign
以下网页介绍了将 Google 登录集成到网络应用程序中的简单工作流程: https://developers.google.com/identity/sign-in/web/sign-in 实现代码
Microsoft 最近向 Azure AD B2C 添加了新的“注册或登录”策略。 https://azure.microsoft.com/en-us/documentation/articles/
鉴于此 xml: 如何选择包含 version="@2.15"的元素?我无法弄清楚如何将 @-sign 放入 XPath。 提前致谢, 埃里克 最佳答案 此 XPath 选择所
我正在为我的网站进行 Slack 集成,包括允许用户使用“使用 Slack 登录”按钮登录。理想情况下,我希望它只要求用户授予 identity.*权限一次,然后下次当他们单击“使用 Slack 登录
在将我的第二个应用程序项目上传到 PlayStore 时,在为新版本上传 .aab 文件时出现以下错误: "Your Android App Bundle is signed with the wro
As Math.sign() 接受数字参数或数字作为字符串,如 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Gl
我已经在我的网站上实现了 Sign In with Apple。但问题是它只适用于我开发者的 Apple ID。 我尝试在同一环境中使用我的个人 Apple ID,并且登录过程也运行良好。 但是,当真
Signed Short (Signed Int16) 乘法解释? short ss = -32768; // 0x8000 SHRT_MIN ss *= (short) -1; printf ("%
class Book attr_accessor :author attr_reader :title attr_reader :comments def initialize(aut
将我面向公众的应用程序部署到 Azure。旨在将身份验证委托(delegate)给 Microsoft、Google、Facebook、Apple 等。因此,一旦用户通过其声称的身份验证并且该提供商返
好吧,我对使用 API 的理解有限 我试图掌握 Adobe Sign API 并遇到了死胡同,在测试页面上我输入了这个并且它有效 但我不知道如何在 C# 中做到这一点 我尝试了以下方法,但知道它缺
上下文 我使用 booth Cognito 用户池和 Cognito 身份池来登录用户。 我想完成一个简单的任务,让用户在 iOS 应用程序(Swift 应用程序)上登录。 我的应用程序基于自定义版本
这可能是一个非常简单的答案,但我无法在任何地方找到它。可能是我以某种方式错过了一个非常基本的 CSS 规则。 这是我的 Sass 代码: h3 { font-size: 20px; m
我见过很多将 hex 转换为 int 的问题,但这些都是 unsigned-> unsigned 的变体。如何将带符号的十六进制转换为 Int? 例如。 somefunc('0xfffff830')
我对 C# 中的准备语句有疑问: OdbcCommand cmd = sql.CreateCommand(); cmd.CommandText = "SELECT UNIQUE_ID FROM use
我想知道是否有办法在我发送授权请求之前如果用户是第一次在 Apple 注册我的应用程序,或者他/她是否已经注册,只需登录即可。 基本上我的应用程序中有一个注册屏幕,用户可以在其中创建两种类型的用户和一
我是 Rails 的新手,我正在使用“设计”gem 进行身份验证。 首先,我通过默认注册页面(例如/users/sign_up)添加一个新用户 然后,我按照从 Devise before filter
当我使用 web3.eth.sign() 方法和 web3.eth.accounts.sign() 方法对字符串进行签名时。两个签名的结果值不同。我不知道为什么这两个结果不同。 我正在使用最新的 we
我正在使用受信任的 CA 颁发的证书签署 EXE 程序。 我正在使用 Windows SDK v6.0a 中的 signtool.exe。 该证书位于计算机商店中,位于“个人”文件夹中。 我的命令行是
我是一名优秀的程序员,十分优秀!