C zachovava pri rotaci znamenko protoze rotace je provadena na znamenkovem typu, dela tedy tzv. aritmeticky bit shift.
Ani náhodou. Right shift na signed integeru je v C implementation defined. Překladač to může přeložit jako arimetický, nebo jako logický shift. Výsledek bude samozřejmě úplně jiný. Ke zbytku toho, co jsi napsal, se nebudu vyjadřovat, je to stejně nesprávné jako tvoje tvrzení, že je to aritmetický bit shift.
Nerekl jsem ze to neni implementation defined. Naopak to zakonite musi byt implementation defined, protoze reprezentace signed cisel neni nijak specifikovana a samotna je implementation defined. Muze byt pres dvojkovy doplnek (jak uz jsem psal v tom zbytku co jsi necetl) a muze byt i jinak.
Proto nema smysl vubec ani neco takoveho psat - rotaci na signed cisle. Ja jsem vzdy delal veskere bitove operace na unsigned typech a nikdy jsem s tim nemel problem. Kdo se chce strelit do nohy, toho C samozrejme necha, protoze neobsahuje zadne vozeni za rucicku. Z tohoto pohledu je tedy C tezky jazyk - clovek musi presne vedet jak to dole funguje.
Cely ten pripad s rotaci signed integeru mi prijde jako umele vykonstruovany priklad ktery jsem treba ja v praxi nikdy nemel, nevim jak ostatni... Ale dava to smysl proc to tak je a tezko si predstavit ze by to melo byt jinak.