- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有人可以向我解释一下如果我忘记 ANSI C 中常量(文字)的后缀(后缀)会发生什么情况吗?
例如我看到的移位操作定义如下:
#define AAR_INTENSET_NOTRESOLVED_Pos (2UL) /*!< Position of NOTRESOLVED field. */
#define AAR_INTENSET_NOTRESOLVED_Msk (0x1UL << AAR_INTENSET_NOTRESOLVED_Pos) /*!< Bit mask of NOTRESOLVED field. */
#define AAR_INTENSET_NOTRESOLVED_Disabled (0UL) /*!< Interrupt disabled. */
#define AAR_INTENSET_NOTRESOLVED_Enabled (1UL) /*!< Interrupt enabled. */
#define AAR_INTENSET_NOTRESOLVED_Set (1UL) /*!< Enable interrupt on write. */
它用于 32 位架构。但它可以移植到 16 位或 8 位。如果不使用后缀 UL 并且我将按预期使用这些宏进行位移操作,会发生什么情况?
我只是假设例如在 8 位架构中可以 (1<<30) 导致溢出。
编辑:我找到了不错的链接:http://dystopiancode.blogspot.cz/2012/08/constant-suffixes-and-prefixes-in-ansi-c.html
但是如果代码应该移植到各种架构上,使用后缀是否安全?
例如,如果后缀 U 表示 unisgned int 那么对于 8 位架构它通常是 16 位但对于 32 位它是 32 位变量,所以 0xFFFFAAAAU 对于 32 位编译器是可以的但对于 8 位编译器不是,对吧?
最佳答案
像 -1,1,2,12345678 等没有任何后缀的十进制数将获得它适合的最小类型,以 int
、long
开头, long long
.
没有任何后缀的八进制或十六进制数,如 0、0123、0x123、0X123 将获得它适合的最小类型,以 int
、unsigned
、long
, unsigned long
, long long
, unsigned long long
.
以下是 AAR_INTENSET_NOTRESOLVED_Pos
超过 31 时的潜在问题。注意:unsigned long
必须至少 32 位。如果 unsigned long
是 32 位,则结果为 0 **,但如果更长,则结果为非零。
(0x1UL << AAR_INTENSET_NOTRESOLVED_Pos)
如果 AAR_INTENSET_NOTRESOLVED_Pos
超过 15,下面是一个类似的潜在问题。0x1
是一个 unsigned
,必须至少为 16 位。此外,如果 unsigned/int
是 16 位,则最小值 0x1
将是 int
。因此,如果 AAR_INTENSET_NOTRESOLVED_Pos == 15
,则在没有显式使用 U
的情况下,0x1
可能会出现问题。 [@Matt McNabb]
(0x1 << AAR_INTENSET_NOTRESOLVED_Pos)
位移运算符
“对每个操作数执行整数提升。结果的类型是提升后的左操作数的类型。如果右操作数的值为负数或大于或等于提升后的左操作数的宽度,则行为未定义。” C11dr §6.5.7 3
机器宽度不是关键问题。 8 位或 16 位机器可以使用 16、32 等位大小 int
。同样,16 位是兼容 C 编译器的最小大小。
[编辑] **我应该说“它(移动超过 31 位)会导致未定义的行为,UB,如果 unsigned long
是 32 位。”
关于C字面后缀U、UL问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25605777/
我想显示阿拉伯文字,但字符 المملك 显示。 例如,在 المملكة العربية السعودية 上显示单词 المملك٩ ا
我的应用程序正在 java + MSSQL 和 MySQL 上运行。下面的查询适用于 MSSQL,但不适用于 MySql。在 mysql 中,当我编写如下查询时,它给出了错误的结果 查询 select
根据 is_destructible 的定义( http://eel.is/c++draft/meta.unary.prop#lib:is_destructible ), is_destructib
我有一个数据库表,其中有一列我对波斯字母进行了分类,以便稍后使用 MySQL WHERE 选择。一切都适用于所有字母,但我在选择在数据库中存储为 (Ù†) 的字母 (?) 和存储为 (Ú†) 的 (?
我知道像这样的可选链接: someOptional?.someProperty 基本上是 someOptional.map { $0.someProperty } 但是,我发现同时做这两件事是不可能的
u-boot配置文件中的以下配置我看不懂 CONFIG_SYS_EXTRA_OPTIONS="SYS_SDRAM_SIZE=0x20000000" 好像在 u-boot 代码中设置 DRAM 大小。但
我对以下两个方法声明感到困惑: private T funWorks(T child, U parent) { // No compilation errors }
给定如下 API: class Bar { ... } class Foo extends Bar { ... } 在 Java 的 Optional 类型中,我们可以说: Optional fooO
我有一个文件,每行有两个字符: $ cat roman Ⅱ Ⅲ nut 当我用 sort -u 对这个文件进行排序时,只显示一行: $ sort -u roman Ⅱ Ⅱ是代码点U+2161,Ⅲ是代码
我正在尝试将 C 数组分配给 C++ std::array。 我该如何做到这一点,最干净的方式并且不制作不需要的拷贝等? 什么时候做 int X[8]; std::array Y = X; 我得到一个
我有以下案例类: case class [Q Length[T] 但是,我收到一条错误消息,说 需要三个参数,而我只给出了两个。我希望它像这样工作: type Area[T] = [Length[T
它是 well documented那个[T; n]可以强制到[T] .下面的代码也是well-formed : fn test(){ let _a: &[i32] = &[1, 2, 3];
我正在尝试使用 tweepy 在 Tkinter 窗口上显示我的 Twitter 时间线。这是代码 import tweepy import tkinter consumer_key = 'xxxxx
我正在使用以下包含 letter ü 的文本片段: test für fur test 代码如下: import re for m in re.finditer(r, line, re.IGNOREC
我对 USQL 很陌生,想知道如何在 select 语句中将“日期时间”转换为“日期”。另外,我如何摆脱毫秒和上午/下午?我真的很感激这方面的任何帮助。谢谢你们。 最佳答案 下面是有效的代码。注意括号
在 U-SQL 自定义代码(代码隐藏或程序集)中可以调用外部服务,例如bing搜索或 map 。 谢谢, 纳西尔 最佳答案 由于以下原因,目前不支持此功能: 想象一下,您编写了一个 UDF 或 UDO
我想 ping 出多个以太网端口。 u-boot 仅支持单个以太网端口是否存在固有限制? 最佳答案 Can u-boot support more than one ethernet port? 是的
我最近开始学习Prolog,但无法解决如何将三个列表合并的问题。 我能够合并两个列表: %element element(X,[X|_]). element(X,[_|Y]):-
我们使用 Beaglebone 黑色定制板。我编辑了一个链接器脚本文件以添加内存部分以在其中记录一些信息: . = ALIGN(4); .logging : { _log_begin
我们使用 Beaglebone 黑色定制板。我编辑了一个链接器脚本文件以添加内存部分以在其中记录一些信息: . = ALIGN(4); .logging : { _log_begin
我是一名优秀的程序员,十分优秀!